From d73539b74e8e02aea0099b149bbe6071726cac99 Mon Sep 17 00:00:00 2001 From: Dave Kuhlman <dkuhlman@davekuhlman.org> Date: Thu, 2 Aug 2018 12:53:00 -0700 Subject: [PATCH] v. 2.29.21 Fix (cleanupName) for simpleType name --- README.rst | 6 +++ generateDS.html | 6 +-- generateDS.py | 13 ++--- generateDS.txt | 2 +- generateds_gui_notes.html | 6 +-- generateds_gui_notes.txt | 2 +- gui/generateds_gui.py | 2 +- librarytemplate_howto.html | 6 +-- librarytemplate_howto.txt | 2 +- process_includes.py | 2 +- setup.py | 2 +- tests/OnePer/oneperType00_2One.py | 4 +- tests/OnePer/oneperType01_2One.py | 4 +- tests/OnePer/oneperType02_2One.py | 4 +- tests/OnePer/oneperType03_2One.py | 4 +- tests/abstract_type1_sup.py | 4 +- tests/annotations1_sup.py | 4 +- tests/anonymous_type1_sup.py | 4 +- tests/anysimpletype1_sup.py | 4 +- tests/anywildcard1_sup.py | 4 +- tests/attr_groups1_sup.py | 4 +- tests/catalogtest1_sup.py | 4 +- tests/cdata1_sup.py | 4 +- tests/cleanupname1_sup.py | 4 +- tests/defaults_cases1_sup.py | 4 +- tests/defaults_cases_always1_sup.py | 4 +- tests/defaults_cases_always2_sup.py | 4 +- tests/defaults_coverage1_sup.py | 4 +- tests/disable_xml_super1_sup.py | 4 +- tests/extensions1_sup.py | 4 +- tests/ipo1_sup.py | 4 +- tests/ipo2_sup.py | 4 +- tests/mapcleanname1_sup.py | 4 +- tests/mixedcontent1_sup.py | 4 +- tests/mixedcontent2_sup.py | 4 +- tests/nested_def1_sup.py | 4 +- tests/no_namespace_defs1_sup.py | 4 +- tests/out1_sup.py | 4 +- tests/people_procincl1_sup.py | 4 +- tests/prefix_classname1_sup.py | 4 +- tests/recursive_simpletype1_sup.py | 4 +- tests/reference_simpletype1_sup.py | 4 +- tests/rem_dup_elems1_sup.py | 4 +- tests/simplecontent_restriction1_sup.py | 4 +- tests/simpletype_memberspecs1_sup.py | 4 +- tests/simpletypes_other1_sup.py | 4 +- tests/to_etree1_sup.py | 4 +- tests/validate_simpletypes1_sup.py | 4 +- tests/validate_simpletypes1_warnings.txt | 62 +++++++++++------------ tests/validate_simpletypes2_sup.py | 4 +- tutorial/generateds_tutorial.html | 6 +-- tutorial/generateds_tutorial.txt | 2 +- tutorial/generateds_tutorial.zip | Bin 48767 -> 48771 bytes 53 files changed, 139 insertions(+), 132 deletions(-) diff --git a/README.rst b/README.rst index c5b7fba..011c8ca 100644 --- a/README.rst +++ b/README.rst @@ -141,6 +141,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Change history -------------- +Version 2.29.21 (08/02/2018) + +- Fix to use of simpleType name. Needed to do cleanupName() on the + class name. Thanks to Daniel Ramirez for reporting this and for + suggesting a fix. + Version 2.29.20 (07/30/2018) - Fix to generation of regular expression used to validate a diff --git a/generateDS.html b/generateDS.html index 1505945..10d8979 100644 --- a/generateDS.html +++ b/generateDS.html @@ -220,7 +220,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.20</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.21</td> </tr> </tbody> </table> @@ -229,7 +229,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">date:</th><td class="field-body">July 30, 2018</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">August 02, 2018</td> </tr> </tbody> </table> @@ -3392,7 +3392,7 @@ following among others:</p> <div class="footer"> <hr class="footer" /> <a class="reference external" href="generateDS.txt">View document source</a>. -Generated on: 2018-07-30 20:37 UTC. +Generated on: 2018-08-02 19:16 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. </div> diff --git a/generateDS.py b/generateDS.py index bbb2f85..82e17ba 100755 --- a/generateDS.py +++ b/generateDS.py @@ -227,7 +227,7 @@ _log = logging.getLogger(__name__) # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.29.20' +VERSION = '2.29.21' ##VERSION## BaseStrTypes = six.string_types @@ -5678,8 +5678,8 @@ class GeneratedsSuper(object): for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: @@ -6712,16 +6712,17 @@ def generateSimpleTypes(wrt, prefix, simpleTypeDict): def writeEnumClass(simpleType): enumValues = simpleType.getEnumValues() + simpleTypeName = cleanupName(simpleType.getName()) if enumValues: output = "" try: - validateIdentifier(simpleType.getName()) + validateIdentifier(simpleTypeName) except ValueError: err_msg( '*** The Simple Type name "%s" is not a valid ' - 'Python identifier\n' % simpleType.getName()) + 'Python identifier\n' % simpleTypeName) return - output += 'class %s(object):\n' % simpleType.getName() + output += 'class %s(object):\n' % simpleTypeName for enumValue in enumValues: try: validatedEnumValue = validateIdentifier(enumValue) diff --git a/generateDS.txt b/generateDS.txt index b9c038f..31b509b 100644 --- a/generateDS.txt +++ b/generateDS.txt @@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema .. version -:revision: 2.29.20 +:revision: 2.29.21 .. version diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html index 6e42bda..ca7a70a 100644 --- a/generateds_gui_notes.html +++ b/generateds_gui_notes.html @@ -220,7 +220,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.20</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.21</td> </tr> </tbody> </table> @@ -229,7 +229,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">date:</th><td class="field-body">July 30, 2018</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">August 02, 2018</td> </tr> </tbody> </table> @@ -401,7 +401,7 @@ $ mv generateds_gui.mo locale/ru/LC_MESSAGES/ <div class="footer"> <hr class="footer" /> <a class="reference external" href="generateds_gui_notes.txt">View document source</a>. -Generated on: 2018-07-30 20:37 UTC. +Generated on: 2018-08-02 19:16 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. </div> diff --git a/generateds_gui_notes.txt b/generateds_gui_notes.txt index 1a74e19..bc75f78 100644 --- a/generateds_gui_notes.txt +++ b/generateds_gui_notes.txt @@ -12,7 +12,7 @@ GenerateDS GUI Notes .. version -:revision: 2.29.20 +:revision: 2.29.21 .. version diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py index add27ec..540354f 100644 --- a/gui/generateds_gui.py +++ b/gui/generateds_gui.py @@ -41,7 +41,7 @@ from libgenerateDS.gui import generateds_gui_session # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.29.20' +VERSION = '2.29.21' ##VERSION## diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html index 3550810..ce9fca7 100644 --- a/librarytemplate_howto.html +++ b/librarytemplate_howto.html @@ -217,7 +217,7 @@ dkuhlman (at) davekuhlman (dot) org <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.20</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.21</td> </tr> </tbody> </table> @@ -226,7 +226,7 @@ dkuhlman (at) davekuhlman (dot) org <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">date:</th><td class="field-body">July 30, 2018</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">August 02, 2018</td> </tr> </tbody> </table> @@ -380,7 +380,7 @@ this command for your needs. For example, you may need to use <div class="footer"> <hr class="footer" /> <a class="reference external" href="librarytemplate_howto.txt">View document source</a>. -Generated on: 2018-07-30 20:37 UTC. +Generated on: 2018-08-02 19:16 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. </div> diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt index 9a2f647..9dbd798 100644 --- a/librarytemplate_howto.txt +++ b/librarytemplate_howto.txt @@ -8,7 +8,7 @@ How to package a generateDS.py generated library .. version -:revision: 2.29.20 +:revision: 2.29.21 .. version diff --git a/process_includes.py b/process_includes.py index d0399f8..69553f2 100755 --- a/process_includes.py +++ b/process_includes.py @@ -40,7 +40,7 @@ except ImportError: # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.29.20' +VERSION = '2.29.21' ##VERSION## CatalogDict = {} diff --git a/setup.py b/setup.py index 3a7f874..b21d86c 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ setup( # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## - version="2.29.20", + version="2.29.21", ##VERSION## author="Dave Kuhlman", author_email="dkuhlman@davekuhlman.org", diff --git a/tests/OnePer/oneperType00_2One.py b/tests/OnePer/oneperType00_2One.py index 4c010be..4f2b00c 100644 --- a/tests/OnePer/oneperType00_2One.py +++ b/tests/OnePer/oneperType00_2One.py @@ -342,8 +342,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/OnePer/oneperType01_2One.py b/tests/OnePer/oneperType01_2One.py index 3301c1d..88d1791 100644 --- a/tests/OnePer/oneperType01_2One.py +++ b/tests/OnePer/oneperType01_2One.py @@ -342,8 +342,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/OnePer/oneperType02_2One.py b/tests/OnePer/oneperType02_2One.py index 60b276e..7eb4aef 100644 --- a/tests/OnePer/oneperType02_2One.py +++ b/tests/OnePer/oneperType02_2One.py @@ -342,8 +342,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/OnePer/oneperType03_2One.py b/tests/OnePer/oneperType03_2One.py index 742b519..dbf59e3 100644 --- a/tests/OnePer/oneperType03_2One.py +++ b/tests/OnePer/oneperType03_2One.py @@ -342,8 +342,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/abstract_type1_sup.py b/tests/abstract_type1_sup.py index 8c96e30..b6b7b47 100644 --- a/tests/abstract_type1_sup.py +++ b/tests/abstract_type1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/annotations1_sup.py b/tests/annotations1_sup.py index bc42f0d..bd590ce 100644 --- a/tests/annotations1_sup.py +++ b/tests/annotations1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/anonymous_type1_sup.py b/tests/anonymous_type1_sup.py index d0b56a3..79335bf 100644 --- a/tests/anonymous_type1_sup.py +++ b/tests/anonymous_type1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/anysimpletype1_sup.py b/tests/anysimpletype1_sup.py index 6698b2f..2e1ec8e 100644 --- a/tests/anysimpletype1_sup.py +++ b/tests/anysimpletype1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/anywildcard1_sup.py b/tests/anywildcard1_sup.py index 5ab725f..f8186dd 100644 --- a/tests/anywildcard1_sup.py +++ b/tests/anywildcard1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/attr_groups1_sup.py b/tests/attr_groups1_sup.py index 11d019d..fe40940 100644 --- a/tests/attr_groups1_sup.py +++ b/tests/attr_groups1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/catalogtest1_sup.py b/tests/catalogtest1_sup.py index 59bdd56..34a7b0b 100644 --- a/tests/catalogtest1_sup.py +++ b/tests/catalogtest1_sup.py @@ -342,8 +342,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/cdata1_sup.py b/tests/cdata1_sup.py index 1caf58a..8df3046 100644 --- a/tests/cdata1_sup.py +++ b/tests/cdata1_sup.py @@ -342,8 +342,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/cleanupname1_sup.py b/tests/cleanupname1_sup.py index 530e5a7..16bac1b 100644 --- a/tests/cleanupname1_sup.py +++ b/tests/cleanupname1_sup.py @@ -342,8 +342,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/defaults_cases1_sup.py b/tests/defaults_cases1_sup.py index 47a6a4c..3209180 100644 --- a/tests/defaults_cases1_sup.py +++ b/tests/defaults_cases1_sup.py @@ -340,8 +340,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/defaults_cases_always1_sup.py b/tests/defaults_cases_always1_sup.py index 003444d..c4a28c0 100644 --- a/tests/defaults_cases_always1_sup.py +++ b/tests/defaults_cases_always1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/defaults_cases_always2_sup.py b/tests/defaults_cases_always2_sup.py index 003444d..c4a28c0 100644 --- a/tests/defaults_cases_always2_sup.py +++ b/tests/defaults_cases_always2_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/defaults_coverage1_sup.py b/tests/defaults_coverage1_sup.py index fcb9a31..052c02a 100644 --- a/tests/defaults_coverage1_sup.py +++ b/tests/defaults_coverage1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/disable_xml_super1_sup.py b/tests/disable_xml_super1_sup.py index a24cf28..72e0e94 100644 --- a/tests/disable_xml_super1_sup.py +++ b/tests/disable_xml_super1_sup.py @@ -341,8 +341,8 @@ class GeneratedsSuper(object): for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/extensions1_sup.py b/tests/extensions1_sup.py index be117d5..46d4e74 100644 --- a/tests/extensions1_sup.py +++ b/tests/extensions1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/ipo1_sup.py b/tests/ipo1_sup.py index 308abf8..82cd1f9 100644 --- a/tests/ipo1_sup.py +++ b/tests/ipo1_sup.py @@ -340,8 +340,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/ipo2_sup.py b/tests/ipo2_sup.py index 308abf8..82cd1f9 100644 --- a/tests/ipo2_sup.py +++ b/tests/ipo2_sup.py @@ -340,8 +340,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/mapcleanname1_sup.py b/tests/mapcleanname1_sup.py index 8f1e0a0..2c6b831 100644 --- a/tests/mapcleanname1_sup.py +++ b/tests/mapcleanname1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/mixedcontent1_sup.py b/tests/mixedcontent1_sup.py index deec386..4c311da 100644 --- a/tests/mixedcontent1_sup.py +++ b/tests/mixedcontent1_sup.py @@ -340,8 +340,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/mixedcontent2_sup.py b/tests/mixedcontent2_sup.py index deec386..4c311da 100644 --- a/tests/mixedcontent2_sup.py +++ b/tests/mixedcontent2_sup.py @@ -340,8 +340,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/nested_def1_sup.py b/tests/nested_def1_sup.py index f25ebd7..af0b3d9 100644 --- a/tests/nested_def1_sup.py +++ b/tests/nested_def1_sup.py @@ -340,8 +340,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/no_namespace_defs1_sup.py b/tests/no_namespace_defs1_sup.py index 5a9b44d..001afd8 100644 --- a/tests/no_namespace_defs1_sup.py +++ b/tests/no_namespace_defs1_sup.py @@ -341,8 +341,8 @@ class GeneratedsSuper(object): for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/out1_sup.py b/tests/out1_sup.py index 36bc1ad..93c8498 100644 --- a/tests/out1_sup.py +++ b/tests/out1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/people_procincl1_sup.py b/tests/people_procincl1_sup.py index d4682eb..11849ef 100644 --- a/tests/people_procincl1_sup.py +++ b/tests/people_procincl1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/prefix_classname1_sup.py b/tests/prefix_classname1_sup.py index 10ad9f5..7d3c39a 100644 --- a/tests/prefix_classname1_sup.py +++ b/tests/prefix_classname1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/recursive_simpletype1_sup.py b/tests/recursive_simpletype1_sup.py index d5fe186..ad25d51 100644 --- a/tests/recursive_simpletype1_sup.py +++ b/tests/recursive_simpletype1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/reference_simpletype1_sup.py b/tests/reference_simpletype1_sup.py index 53f1fe3..a65f200 100644 --- a/tests/reference_simpletype1_sup.py +++ b/tests/reference_simpletype1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/rem_dup_elems1_sup.py b/tests/rem_dup_elems1_sup.py index b8c779d..8945e59 100644 --- a/tests/rem_dup_elems1_sup.py +++ b/tests/rem_dup_elems1_sup.py @@ -342,8 +342,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/simplecontent_restriction1_sup.py b/tests/simplecontent_restriction1_sup.py index b5a0111..895aa6e 100644 --- a/tests/simplecontent_restriction1_sup.py +++ b/tests/simplecontent_restriction1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/simpletype_memberspecs1_sup.py b/tests/simpletype_memberspecs1_sup.py index 74a42d9..b1d7ed3 100644 --- a/tests/simpletype_memberspecs1_sup.py +++ b/tests/simpletype_memberspecs1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/simpletypes_other1_sup.py b/tests/simpletypes_other1_sup.py index ecbe57b..2e3d062 100644 --- a/tests/simpletypes_other1_sup.py +++ b/tests/simpletypes_other1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/to_etree1_sup.py b/tests/to_etree1_sup.py index a91dacb..d360208 100644 --- a/tests/to_etree1_sup.py +++ b/tests/to_etree1_sup.py @@ -343,8 +343,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/validate_simpletypes1_sup.py b/tests/validate_simpletypes1_sup.py index b7d1d4f..772c0fd 100644 --- a/tests/validate_simpletypes1_sup.py +++ b/tests/validate_simpletypes1_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tests/validate_simpletypes1_warnings.txt b/tests/validate_simpletypes1_warnings.txt index af03491..503ad4e 100644 --- a/tests/validate_simpletypes1_warnings.txt +++ b/tests/validate_simpletypes1_warnings.txt @@ -1,62 +1,62 @@ -tests/validate_simpletypes2_sup.py:1077: UserWarning: Value "2" does not match xsd minExclusive restriction on integer_range_1_st +tests/validate_simpletypes2_sup.py:1078: UserWarning: Value "2" does not match xsd minExclusive restriction on integer_range_1_st warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on integer_range_1_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1087: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']] +tests/validate_simpletypes2_sup.py:1088: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']] warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_pattern_st_patterns_, )) -tests/validate_simpletypes2_sup.py:1100: UserWarning: Value "floatxx" does not match xsd enumeration restriction on token_enum_st +tests/validate_simpletypes2_sup.py:1101: UserWarning: Value "floatxx" does not match xsd enumeration restriction on token_enum_st warnings_.warn('Value "%(value)s" does not match xsd enumeration restriction on token_enum_st' % {"value" : value.encode("utf-8")} ) -tests/validate_simpletypes2_sup.py:1107: UserWarning: Value "22" does not match xsd maxInclusive restriction on integer_range_incl_st +tests/validate_simpletypes2_sup.py:1108: UserWarning: Value "22" does not match xsd maxInclusive restriction on integer_range_incl_st warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on integer_range_incl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1112: UserWarning: Value "-40" does not match xsd minExclusive restriction on integer_range_excl_st +tests/validate_simpletypes2_sup.py:1113: UserWarning: Value "-40" does not match xsd minExclusive restriction on integer_range_excl_st warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on integer_range_excl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1121: UserWarning: Value "mno pqr" does not match xsd minLength restriction on min_max_length_st +tests/validate_simpletypes2_sup.py:1122: UserWarning: Value "mno pqr" does not match xsd minLength restriction on min_max_length_st warnings_.warn('Value "%(value)s" does not match xsd minLength restriction on min_max_length_st' % {"value" : value.encode("utf-8")} ) -tests/validate_simpletypes2_sup.py:1126: UserWarning: Value "012345" does not match xsd length restriction on length_st +tests/validate_simpletypes2_sup.py:1127: UserWarning: Value "012345" does not match xsd length restriction on length_st warnings_.warn('Value "%(value)s" does not match xsd length restriction on length_st' % {"value" : value.encode("utf-8")} ) -tests/validate_simpletypes2_sup.py:1210: UserWarning: Value "0.2" does not match xsd minInclusive restriction on anonymous_float_valueType +tests/validate_simpletypes2_sup.py:1211: UserWarning: Value "0.2" does not match xsd minInclusive restriction on anonymous_float_valueType warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on anonymous_float_valueType' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1197: UserWarning: Value "efgh" does not match xsd pattern restrictions: [[u'^abcd|ef\\|gh$']] +tests/validate_simpletypes2_sup.py:1198: UserWarning: Value "efgh" does not match xsd pattern restrictions: [[u'^abcd|ef\\|gh$']] warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_vbar_pattern_st_patterns_, )) -tests/validate_simpletypes2_sup.py:1204: UserWarning: Value "efÄŸh" does not match xsd pattern restrictions: [[u'^ab\xe7d|ef\\|gh$']] +tests/validate_simpletypes2_sup.py:1205: UserWarning: Value "efÄŸh" does not match xsd pattern restrictions: [[u'^ab\xe7d|ef\\|gh$']] warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_unicode_pattern_st_patterns_, )) -tests/validate_simpletypes2_sup.py:1079: UserWarning: Value "9" does not match xsd maxExclusive restriction on integer_range_1_st +tests/validate_simpletypes2_sup.py:1080: UserWarning: Value "9" does not match xsd maxExclusive restriction on integer_range_1_st warnings_.warn('Value "%(value)s" does not match xsd maxExclusive restriction on integer_range_1_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1087: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']] +tests/validate_simpletypes2_sup.py:1088: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']] warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_pattern_st_patterns_, )) -tests/validate_simpletypes2_sup.py:1105: UserWarning: Value "-50" does not match xsd minInclusive restriction on integer_range_incl_st +tests/validate_simpletypes2_sup.py:1106: UserWarning: Value "-50" does not match xsd minInclusive restriction on integer_range_incl_st warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on integer_range_incl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1119: UserWarning: Value "asdf asdf asdf asdf asdf asdf" does not match xsd maxLength restriction on min_max_length_st +tests/validate_simpletypes2_sup.py:1120: UserWarning: Value "asdf asdf asdf asdf asdf asdf" does not match xsd maxLength restriction on min_max_length_st warnings_.warn('Value "%(value)s" does not match xsd maxLength restriction on min_max_length_st' % {"value" : value.encode("utf-8")} ) -tests/validate_simpletypes2_sup.py:1126: UserWarning: Value "01234567890" does not match xsd length restriction on length_st +tests/validate_simpletypes2_sup.py:1127: UserWarning: Value "01234567890" does not match xsd length restriction on length_st warnings_.warn('Value "%(value)s" does not match xsd length restriction on length_st' % {"value" : value.encode("utf-8")} ) -tests/validate_simpletypes2_sup.py:1136: UserWarning: Value "2015-05-01" does not match xsd minInclusive restriction on date_minincl_st +tests/validate_simpletypes2_sup.py:1137: UserWarning: Value "2015-05-01" does not match xsd minInclusive restriction on date_minincl_st warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on date_minincl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1141: UserWarning: Value "2015-11-01" does not match xsd maxInclusive restriction on date_maxincl_st +tests/validate_simpletypes2_sup.py:1142: UserWarning: Value "2015-11-01" does not match xsd maxInclusive restriction on date_maxincl_st warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on date_maxincl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1146: UserWarning: Value "2015-05-01" does not match xsd minExclusive restriction on date_minexcl_st +tests/validate_simpletypes2_sup.py:1147: UserWarning: Value "2015-05-01" does not match xsd minExclusive restriction on date_minexcl_st warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on date_minexcl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1151: UserWarning: Value "2015-11-01" does not match xsd maxExclusive restriction on date_maxexcl_st +tests/validate_simpletypes2_sup.py:1152: UserWarning: Value "2015-11-01" does not match xsd maxExclusive restriction on date_maxexcl_st warnings_.warn('Value "%(value)s" does not match xsd maxExclusive restriction on date_maxexcl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1156: UserWarning: Value "13:30:00" does not match xsd minInclusive restriction on time_minincl_st +tests/validate_simpletypes2_sup.py:1157: UserWarning: Value "13:30:00" does not match xsd minInclusive restriction on time_minincl_st warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on time_minincl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1161: UserWarning: Value "17:00:00" does not match xsd maxInclusive restriction on time_maxincl_st +tests/validate_simpletypes2_sup.py:1162: UserWarning: Value "17:00:00" does not match xsd maxInclusive restriction on time_maxincl_st warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on time_maxincl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1166: UserWarning: Value "13:30:00" does not match xsd minExclusive restriction on time_minexcl_st +tests/validate_simpletypes2_sup.py:1167: UserWarning: Value "13:30:00" does not match xsd minExclusive restriction on time_minexcl_st warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on time_minexcl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1171: UserWarning: Value "17:00:00" does not match xsd maxExclusive restriction on time_maxexcl_st +tests/validate_simpletypes2_sup.py:1172: UserWarning: Value "17:00:00" does not match xsd maxExclusive restriction on time_maxexcl_st warnings_.warn('Value "%(value)s" does not match xsd maxExclusive restriction on time_maxexcl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1176: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minInclusive restriction on datetime_minincl_st +tests/validate_simpletypes2_sup.py:1177: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minInclusive restriction on datetime_minincl_st warnings_.warn('Value "%(value)s" does not match xsd minInclusive restriction on datetime_minincl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1181: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxInclusive restriction on datetime_maxincl_st +tests/validate_simpletypes2_sup.py:1182: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxInclusive restriction on datetime_maxincl_st warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on datetime_maxincl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1186: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minExclusive restriction on datetime_minexcl_st +tests/validate_simpletypes2_sup.py:1187: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minExclusive restriction on datetime_minexcl_st warnings_.warn('Value "%(value)s" does not match xsd minExclusive restriction on datetime_minexcl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1191: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxExclusive restriction on datetime_maxexcl_st +tests/validate_simpletypes2_sup.py:1192: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxExclusive restriction on datetime_maxexcl_st warnings_.warn('Value "%(value)s" does not match xsd maxExclusive restriction on datetime_maxexcl_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1212: UserWarning: Value "6.6" does not match xsd maxInclusive restriction on anonymous_float_valueType +tests/validate_simpletypes2_sup.py:1213: UserWarning: Value "6.6" does not match xsd maxInclusive restriction on anonymous_float_valueType warnings_.warn('Value "%(value)s" does not match xsd maxInclusive restriction on anonymous_float_valueType' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1084: UserWarning: Value "aaa12zzz" does not match xsd minLength restriction on pattern_st +tests/validate_simpletypes2_sup.py:1085: UserWarning: Value "aaa12zzz" does not match xsd minLength restriction on pattern_st warnings_.warn('Value "%(value)s" does not match xsd minLength restriction on pattern_st' % {"value" : value} ) -tests/validate_simpletypes2_sup.py:1087: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']] +tests/validate_simpletypes2_sup.py:1088: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [[u'^aaa.*zzz$', u'^bbb.*xxx$'], [u'^.*123.*$', u'^.*456.*$']] warnings_.warn('Value "%s" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_pattern_st_patterns_, )) -tests/validate_simpletypes2_sup.py:1646: UserWarning: Value "pqrst" does not match xsd minLength restriction on simpleTwoElementTwoType +tests/validate_simpletypes2_sup.py:1647: UserWarning: Value "pqrst" does not match xsd minLength restriction on simpleTwoElementTwoType warnings_.warn('Value "%(value)s" does not match xsd minLength restriction on simpleTwoElementTwoType' % {"value" : value.encode("utf-8")} ) diff --git a/tests/validate_simpletypes2_sup.py b/tests/validate_simpletypes2_sup.py index b7d1d4f..772c0fd 100644 --- a/tests/validate_simpletypes2_sup.py +++ b/tests/validate_simpletypes2_sup.py @@ -341,8 +341,8 @@ except ImportError as exp: for patterns1 in patterns: found2 = False for patterns2 in patterns1: - mo = re_.fullmatch(patterns2, target) - if mo is not None: + mo = re_.search(patterns2, target) + if mo is not None and len(mo.group(0)) == len(target): found2 = True break if not found2: diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html index 2cd30e8..764131b 100644 --- a/tutorial/generateds_tutorial.html +++ b/tutorial/generateds_tutorial.html @@ -219,7 +219,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.20</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.21</td> </tr> </tbody> </table> @@ -228,7 +228,7 @@ They are used by updateversion.py. --> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">date:</th><td class="field-body">July 30, 2018</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">August 02, 2018</td> </tr> </tbody> </table> @@ -1210,7 +1210,7 @@ named <tt class="docutils literal">garden_api.py</tt>, you can create an instanc <div class="footer"> <hr class="footer" /> <a class="reference external" href="generateds_tutorial.txt">View document source</a>. -Generated on: 2018-07-30 20:37 UTC. +Generated on: 2018-08-02 19:16 UTC. Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source. </div> diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt index a535966..afcdc58 100644 --- a/tutorial/generateds_tutorial.txt +++ b/tutorial/generateds_tutorial.txt @@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial .. version -:revision: 2.29.20 +:revision: 2.29.21 .. version diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip index 5a697437cc0705a4362989649684a1c95e92f388..09e63c6174e36f71d071efe8e4c174fb9cc5c5e1 100644 GIT binary patch delta 12948 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 K24=Yc0002uGg2l1 delta 12882 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 -- GitLab