From 1035151915b04b32b7983a62105e78ffc1a1bdf4 Mon Sep 17 00:00:00 2001 From: Dave Kuhlman <dkuhlman@davekuhlman.org> Date: Tue, 22 Aug 2017 13:00:53 -0700 Subject: [PATCH] Django changes (float fix and class sufix suppression) --- README.rst | 14 ++++++ django/gends_generate_django.py | 10 +++- django/gends_run_gen_django.py | 22 +++++++-- django/generatedssuper.py | 27 ++++++---- generateDS.html | 8 +-- generateDS.py | 6 ++- generateDS.txt | 2 +- generateds_gui_notes.html | 8 +-- generateds_gui_notes.txt | 2 +- gui/generateds_gui.py | 2 +- librarytemplate_howto.html | 8 +-- librarytemplate_howto.txt | 2 +- process_includes.py | 2 +- setup.py | 2 +- tests/OnePer/oneperType00_2One.py | 1 + tests/OnePer/oneperType01_2One.py | 1 + tests/OnePer/oneperType02_2One.py | 1 + tests/OnePer/oneperType03_2One.py | 1 + tests/abstract_type1_sub.py | 1 + tests/abstract_type1_sup.py | 1 + tests/annotations1_sub.py | 1 + tests/annotations1_sup.py | 1 + tests/anonymous_type1_sub.py | 1 + tests/anonymous_type1_sup.py | 1 + tests/anysimpletype1_sub.py | 1 + tests/anysimpletype1_sup.py | 1 + tests/anywildcard1_sub.py | 1 + tests/anywildcard1_sup.py | 1 + tests/attr_groups1_sub.py | 1 + tests/attr_groups1_sup.py | 1 + tests/catalogtest1_sub.py | 1 + tests/catalogtest1_sup.py | 1 + tests/cdata1_sub.py | 1 + tests/cdata1_sup.py | 1 + tests/check_results.rb | 2 + tests/cleanupname1_sub.py | 1 + tests/cleanupname1_sup.py | 1 + tests/copy_all | 2 + tests/defaults_cases1_sub.py | 1 + tests/defaults_cases1_sup.py | 1 + tests/defaults_coverage1_sub.py | 1 + tests/defaults_coverage1_sup.py | 1 + tests/disable_xml_super1_sub.py | 1 + tests/disable_xml_super1_sup.py | 1 + tests/extensions1_sub.py | 1 + tests/extensions1_sup.py | 1 + tests/ipo1_sub.py | 1 + tests/ipo1_sup.py | 1 + tests/ipo2_sub.py | 1 + tests/ipo2_sup.py | 1 + tests/mapcleanname1_sub.py | 1 + tests/mapcleanname1_sup.py | 1 + tests/nested_def1_sub.py | 1 + tests/nested_def1_sup.py | 1 + tests/out1_sub.py | 1 + tests/out1_sup.py | 1 + tests/people_procincl1_sub.py | 1 + tests/people_procincl1_sup.py | 1 + tests/prefix_classname1_sub.py | 1 + tests/prefix_classname1_sup.py | 1 + tests/recursive_simpletype1_sub.py | 1 + tests/recursive_simpletype1_sup.py | 1 + tests/reference_simpletype1_sub.py | 1 + tests/reference_simpletype1_sup.py | 1 + tests/rem_dup_elems1_sub.py | 1 + tests/rem_dup_elems1_sup.py | 1 + tests/simplecontent_restriction1_sub.py | 1 + tests/simplecontent_restriction1_sup.py | 1 + tests/simpletype_memberspecs1_sub.py | 1 + tests/simpletype_memberspecs1_sup.py | 1 + tests/simpletypes_other1_sub.py | 1 + tests/simpletypes_other1_sup.py | 1 + tests/to_etree1_sub.py | 1 + tests/to_etree1_sup.py | 1 + tests/validate_simpletypes1_sub.py | 1 + tests/validate_simpletypes1_sup.py | 1 + tests/validate_simpletypes1_warnings.txt | 60 +++++++++++------------ tests/validate_simpletypes2_sub.py | 1 + tests/validate_simpletypes2_sup.py | 1 + tutorial/generateds_tutorial.html | 8 +-- tutorial/generateds_tutorial.txt | 2 +- tutorial/generateds_tutorial.zip | Bin 48768 -> 48774 bytes 82 files changed, 182 insertions(+), 69 deletions(-) mode change 100644 => 100755 django/gends_run_gen_django.py diff --git a/README.rst b/README.rst index 8c9435b..3cd952b 100644 --- a/README.rst +++ b/README.rst @@ -141,6 +141,20 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Change history -------------- +Version 2.28b (08/22/2017) + +- Fix for Django models and forms generation -- "float" data type + was being mapped and was not treated as a simple data type. + Thanks to Sriram Sundar for catching and reporting this. +- Sriram also requested that in the Django models and forms + generation, we be able to omit the "_model" and "_form" suffix on + generated class names. There is now a "--no-class-suffixes" + command line option accepted by both gends_run_gen_django.py + and gends_generate_django.py to do that. Thanks to Sriram for + this suggestion. +- Added Python version to the information in the comments at the top + of generated modules. + Version 2.28a (06/23/2017) Significant work by Alim Gokkaya. Thank you, Alim. diff --git a/django/gends_generate_django.py b/django/gends_generate_django.py index e40ae06..28e7913 100755 --- a/django/gends_generate_django.py +++ b/django/gends_generate_django.py @@ -8,6 +8,8 @@ Usage: Options: -f, --force Overwrite models.py and forms.py without asking. + --no-class-suffixes + Do not add suffix "_model" and _form" to generated class names. -h, --help Show this help message. """ @@ -110,7 +112,8 @@ def generate_model(options, module_name): for class_name in supermod.__all__: if hasattr(supermod, class_name): cls = getattr(supermod, class_name) - cls.generate_model_(wrtmodels, wrtforms, unique_name_map) + cls.generate_model_( + wrtmodels, wrtforms, unique_name_map, options.class_suffixes) else: sys.stderr.write('class %s not defined\n' % (class_name, )) wrtadmin('from django.contrib import admin\n') @@ -172,16 +175,19 @@ def main(): opts, args = getopt.getopt( args, 'hfs:', [ 'help', 'force', - 'suffix=', ]) + 'no-class-suffixes', ]) except: usage() options = ProgramOptions() options.force = False + options.class_suffixes = True for opt, val in opts: if opt in ('-h', '--help'): usage() elif opt in ('-f', '--force'): options.force = True + elif opt == '--no-class-suffixes': + options.class_suffixes = False if len(args) != 1: usage() module_name = args[0] diff --git a/django/gends_run_gen_django.py b/django/gends_run_gen_django.py old mode 100644 new mode 100755 index 51ed73f..14e9109 --- a/django/gends_run_gen_django.py +++ b/django/gends_run_gen_django.py @@ -18,6 +18,9 @@ Options: -v, --verbose Display additional information while running. -s, --script Write out (display) the command lines used. Can be captured and used in a shell script, for example. + --no-class-suffixes + Do not add suffix "_model" and _form" to + generated class names. Examples: python gends_run_gen_django.py my_schema.xsd python gends_run_gen_django.py -f -p ../generateDS.py my_other_schema.xsd @@ -93,10 +96,16 @@ def generate(options, schema_file_name): ) if not run_cmd(options, args): return - args = ( - './gends_generate_django.py', '-f', - bindings_file_stem, - ) + if options['class_suffixes']: + args = ( + './gends_generate_django.py', '-f', + bindings_file_stem, + ) + else: + args = ( + './gends_generate_django.py', '-f', '--no-class-suffixes', + bindings_file_stem, + ) if not run_cmd(options, args): return @@ -153,6 +162,7 @@ def main(): opts, args = getopt.getopt(args, 'hvfp:s', [ 'help', 'verbose', 'script', 'force', 'path-to-generateDS-script=', + 'no-class-suffixes', ]) except: usage() @@ -161,6 +171,7 @@ def main(): options['verbose'] = False options['script'] = False options['path'] = './generateDS.py' + options['class_suffixes'] = True for opt, val in opts: if opt in ('-h', '--help'): usage() @@ -172,6 +183,8 @@ def main(): options['script'] = True elif opt in ('-p', '--path-to-generateDS-script'): options['path'] = val + elif opt == '--no-class-suffixes': + options['class_suffixes'] = False if not os.path.exists(options['path']): sys.exit( '\n*** error: Cannot find generateDS.py. ' @@ -184,4 +197,5 @@ def main(): if __name__ == '__main__': #import pdb; pdb.set_trace() + #import ipdb; ipdb.set_trace() main() diff --git a/django/generatedssuper.py b/django/generatedssuper.py index 87e859a..daec5d6 100644 --- a/django/generatedssuper.py +++ b/django/generatedssuper.py @@ -154,10 +154,19 @@ class GeneratedsSuper(object): return prefix, name @classmethod - def generate_model_(cls, wrtmodels, wrtforms, unique_name_map): + def generate_model_( + cls, wrtmodels, wrtforms, unique_name_map, class_suffixes): + if class_suffixes: + model_suffix = '_model' + form_suffix = '_form' + else: + model_suffix = '' + form_suffix = '' class_name = unique_name_map.get(cls.__name__) - wrtmodels('\nclass %s_model(models.Model):\n' % (class_name, )) - wrtforms('\nclass %s_form(forms.Form):\n' % (class_name, )) + wrtmodels('\nclass %s%s(models.Model):\n' % ( + class_name, model_suffix, )) + wrtforms('\nclass %s%s(forms.Form):\n' % ( + class_name, form_suffix, )) if cls.superclass is not None: wrtmodels(' %s = models.ForeignKey("%s_model")\n' % ( cls.superclass.__name__, cls.superclass.__name__, )) @@ -175,7 +184,7 @@ class GeneratedsSuper(object): name += 'x' elif name.endswith('_') and not name == AnyTypeIdentifier: name += 'x' - data_type = mapName(cleanupName(data_type)) + clean_data_type = mapName(cleanupName(data_type)) if data_type == AnyTypeIdentifier: data_type = 'string' if data_type in Simple_type_table: @@ -224,15 +233,15 @@ class GeneratedsSuper(object): sys.stderr.write('Unhandled simple type: %s %s\n' % ( name, data_type, )) else: - mapped_type = unique_name_map.get(data_type) + mapped_type = unique_name_map.get(clean_data_type) if mapped_type is not None: - data_type = mapped_type + clean_data_type = mapped_type wrtmodels( ' %s = models.ForeignKey(\n "%s_model",\n' % ( - name, data_type, )) + name, clean_data_type, )) wrtmodels( ' related_name="{}_{}_{}",\n'.format( - class_name, name, data_type, )) + class_name, name, clean_data_type, )) if is_optional: wrtmodels( ' blank=True, null=True,\n') @@ -240,7 +249,7 @@ class GeneratedsSuper(object): wrtforms( ' %s = forms.MultipleChoiceField(%s_model.objects' '.all())\n' % ( - name, data_type, )) + name, clean_data_type, )) wrtmodels('\n') wrtmodels(' def __unicode__(self):\n') wrtmodels(' return "id: %s" % (self.id, )\n') diff --git a/generateDS.html b/generateDS.html index bc11789..827ef04 100644 --- a/generateDS.html +++ b/generateDS.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" /> +<meta name="generator" content="Docutils 0.14rc2.dev: http://docutils.sourceforge.net/" /> <title>generateDS -- Generate Data Structures from XML Schema</title> <meta name="author" content="Dave Kuhlman" /> <style type="text/css"> @@ -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.28a</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28b</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">June 23, 2017</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">August 22, 2017</td> </tr> </tbody> </table> @@ -3380,7 +3380,7 @@ following among others:</p> <div class="footer"> <hr class="footer" /> <a class="reference external" href="generateDS.txt">View document source</a>. -Generated on: 2017-06-23 23:12 UTC. +Generated on: 2017-08-22 19:57 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 9b591ec..05ab66a 100755 --- a/generateDS.py +++ b/generateDS.py @@ -227,7 +227,7 @@ logging.disable(logging.INFO) # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## -VERSION = '2.28a' +VERSION = '2.28b' ##VERSION## if sys.version_info.major == 2: @@ -5031,6 +5031,7 @@ TEMPLATE_HEADER = """\ # # Generated {tstamp} by generateDS.py{version}. +# Python {pyversion} # # Command line options: {options1} @@ -5821,6 +5822,7 @@ except ImportError as exp: s1 = TEMPLATE_HEADER.format( tstamp=tstamp, version=version, + pyversion=sys.version.replace('\n', ' '), options1=options1, args1=args1, command_line=command_line, @@ -6252,6 +6254,7 @@ TEMPLATE_SUBCLASS_HEADER = """\ # # Generated %s by generateDS.py%s. +# Python %s # # Command line options: %s @@ -6507,6 +6510,7 @@ def generateSubclasses(root, subclassFilename, behaviorFilename, options1, args1, command_line = format_options_args(options, args) current_working_directory = os.path.split(os.getcwd())[1] wrt(TEMPLATE_SUBCLASS_HEADER % (tstamp, version, + sys.version.replace('\n', ' '), options1, args1, command_line, current_working_directory, superModule, ExternalEncoding, )) diff --git a/generateDS.txt b/generateDS.txt index c4cb9b8..58303ba 100644 --- a/generateDS.txt +++ b/generateDS.txt @@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema .. version -:revision: 2.28a +:revision: 2.28b .. version diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html index e0e7cd2..37cf9c7 100644 --- a/generateds_gui_notes.html +++ b/generateds_gui_notes.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" /> +<meta name="generator" content="Docutils 0.14rc2.dev: http://docutils.sourceforge.net/" /> <title>GenerateDS GUI Notes</title> <meta name="author" content="Dave Kuhlman" /> <style type="text/css"> @@ -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.28a</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28b</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">June 23, 2017</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">August 22, 2017</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: 2017-06-23 23:12 UTC. +Generated on: 2017-08-22 19:57 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 4830511..2783eda 100644 --- a/generateds_gui_notes.txt +++ b/generateds_gui_notes.txt @@ -12,7 +12,7 @@ GenerateDS GUI Notes .. version -:revision: 2.28a +:revision: 2.28b .. version diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py index fc1e734..2f127e3 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.28a' +VERSION = '2.28b' ##VERSION## diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html index cb45e02..a1de32b 100644 --- a/librarytemplate_howto.html +++ b/librarytemplate_howto.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" /> +<meta name="generator" content="Docutils 0.14rc2.dev: http://docutils.sourceforge.net/" /> <title>How to package a generateDS.py generated library</title> <meta name="author" content="Dave Kuhlman" /> <style type="text/css"> @@ -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.28a</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28b</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">June 23, 2017</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">August 22, 2017</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: 2017-06-23 23:12 UTC. +Generated on: 2017-08-22 19:57 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 6e2f826..6eee107 100644 --- a/librarytemplate_howto.txt +++ b/librarytemplate_howto.txt @@ -8,7 +8,7 @@ How to package a generateDS.py generated library .. version -:revision: 2.28a +:revision: 2.28b .. version diff --git a/process_includes.py b/process_includes.py index 1fe384b..e374252 100644 --- 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.28a' +VERSION = '2.28b' ##VERSION## CatalogDict = {} diff --git a/setup.py b/setup.py index 145feeb..f9f366a 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ setup(name="generateDS", # Do not modify the following VERSION comments. # Used by updateversion.py. ##VERSION## - version="2.28a", + version="2.28b", ##VERSION## author="Dave Kuhlman", author_email="dkuhlman@davekuhlman.org", diff --git a/tests/OnePer/oneperType00_2One.py b/tests/OnePer/oneperType00_2One.py index 6a9383a..7c88aa9 100644 --- a/tests/OnePer/oneperType00_2One.py +++ b/tests/OnePer/oneperType00_2One.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/OnePer/oneperType01_2One.py b/tests/OnePer/oneperType01_2One.py index 9cb957b..561cf1e 100644 --- a/tests/OnePer/oneperType01_2One.py +++ b/tests/OnePer/oneperType01_2One.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/OnePer/oneperType02_2One.py b/tests/OnePer/oneperType02_2One.py index 2cc43fd..095fbb7 100644 --- a/tests/OnePer/oneperType02_2One.py +++ b/tests/OnePer/oneperType02_2One.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/OnePer/oneperType03_2One.py b/tests/OnePer/oneperType03_2One.py index cf8139e..738a6dd 100644 --- a/tests/OnePer/oneperType03_2One.py +++ b/tests/OnePer/oneperType03_2One.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/abstract_type1_sub.py b/tests/abstract_type1_sub.py index b7e815b..7895f4e 100644 --- a/tests/abstract_type1_sub.py +++ b/tests/abstract_type1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/abstract_type1_sup.py b/tests/abstract_type1_sup.py index 72181e6..76b59cc 100644 --- a/tests/abstract_type1_sup.py +++ b/tests/abstract_type1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/annotations1_sub.py b/tests/annotations1_sub.py index ee65ce6..eab0241 100644 --- a/tests/annotations1_sub.py +++ b/tests/annotations1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/annotations1_sup.py b/tests/annotations1_sup.py index 784711b..6ee0fb0 100644 --- a/tests/annotations1_sup.py +++ b/tests/annotations1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/anonymous_type1_sub.py b/tests/anonymous_type1_sub.py index e6d3696..4969be8 100644 --- a/tests/anonymous_type1_sub.py +++ b/tests/anonymous_type1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/anonymous_type1_sup.py b/tests/anonymous_type1_sup.py index 757d76b..c5097e2 100644 --- a/tests/anonymous_type1_sup.py +++ b/tests/anonymous_type1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/anysimpletype1_sub.py b/tests/anysimpletype1_sub.py index a8d0cc3..6689ed9 100644 --- a/tests/anysimpletype1_sub.py +++ b/tests/anysimpletype1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/anysimpletype1_sup.py b/tests/anysimpletype1_sup.py index a42b892..9dc2df8 100644 --- a/tests/anysimpletype1_sup.py +++ b/tests/anysimpletype1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/anywildcard1_sub.py b/tests/anywildcard1_sub.py index 7e40b28..c58ae95 100644 --- a/tests/anywildcard1_sub.py +++ b/tests/anywildcard1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/anywildcard1_sup.py b/tests/anywildcard1_sup.py index 863dd05..51bc9cf 100644 --- a/tests/anywildcard1_sup.py +++ b/tests/anywildcard1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/attr_groups1_sub.py b/tests/attr_groups1_sub.py index 446338a..21a53f5 100644 --- a/tests/attr_groups1_sub.py +++ b/tests/attr_groups1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/attr_groups1_sup.py b/tests/attr_groups1_sup.py index 1e8f030..489d825 100644 --- a/tests/attr_groups1_sup.py +++ b/tests/attr_groups1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/catalogtest1_sub.py b/tests/catalogtest1_sub.py index ba9ea61..6be03be 100644 --- a/tests/catalogtest1_sub.py +++ b/tests/catalogtest1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/catalogtest1_sup.py b/tests/catalogtest1_sup.py index b63985e..1d2f9cf 100644 --- a/tests/catalogtest1_sup.py +++ b/tests/catalogtest1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/cdata1_sub.py b/tests/cdata1_sub.py index 137519f..d9bde8c 100644 --- a/tests/cdata1_sub.py +++ b/tests/cdata1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/cdata1_sup.py b/tests/cdata1_sup.py index 6058986..ed4c2ba 100644 --- a/tests/cdata1_sup.py +++ b/tests/cdata1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/check_results.rb b/tests/check_results.rb index f9ad8d8..015c7b3 100755 --- a/tests/check_results.rb +++ b/tests/check_results.rb @@ -69,6 +69,8 @@ $commands = [ "diff -u nested_def1_sup.py nested_def2_sup.py", "diff -u catalogtest1_sub.py catalogtest2_sub.py", "diff -u catalogtest1_sup.py catalogtest2_sup.py", + "diff -u disable_xml_super1_sub.py disable_xml_super2_sub.py", + "diff -u disable_xml_super1_sup.py disable_xml_super2_sup.py", ] def check diff --git a/tests/cleanupname1_sub.py b/tests/cleanupname1_sub.py index c00f3e0..6a1acf0 100644 --- a/tests/cleanupname1_sub.py +++ b/tests/cleanupname1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/cleanupname1_sup.py b/tests/cleanupname1_sup.py index dcdd1aa..83950e7 100644 --- a/tests/cleanupname1_sup.py +++ b/tests/cleanupname1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/copy_all b/tests/copy_all index b89ea43..70abfa9 100755 --- a/tests/copy_all +++ b/tests/copy_all @@ -57,3 +57,5 @@ cp catalogtest2_sup.py catalogtest1_sup.py cp catalogtest2_sub.py catalogtest1_sub.py cp rem_dup_elems2_sup.py rem_dup_elems1_sup.py cp rem_dup_elems2_sub.py rem_dup_elems1_sub.py +cp disable_xml_super2_sup.py disable_xml_super1_sup.py +cp disable_xml_super2_sub.py disable_xml_super1_sub.py diff --git a/tests/defaults_cases1_sub.py b/tests/defaults_cases1_sub.py index 3e60267..ee44fea 100644 --- a/tests/defaults_cases1_sub.py +++ b/tests/defaults_cases1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/defaults_cases1_sup.py b/tests/defaults_cases1_sup.py index 119f2dc..558b863 100644 --- a/tests/defaults_cases1_sup.py +++ b/tests/defaults_cases1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/defaults_coverage1_sub.py b/tests/defaults_coverage1_sub.py index 3452d18..776bf45 100644 --- a/tests/defaults_coverage1_sub.py +++ b/tests/defaults_coverage1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/defaults_coverage1_sup.py b/tests/defaults_coverage1_sup.py index 7bd6d4f..51e7227 100644 --- a/tests/defaults_coverage1_sup.py +++ b/tests/defaults_coverage1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/disable_xml_super1_sub.py b/tests/disable_xml_super1_sub.py index 4f116e8..e7184a2 100644 --- a/tests/disable_xml_super1_sub.py +++ b/tests/disable_xml_super1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/disable_xml_super1_sup.py b/tests/disable_xml_super1_sup.py index 9ad8be9..db04580 100644 --- a/tests/disable_xml_super1_sup.py +++ b/tests/disable_xml_super1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/extensions1_sub.py b/tests/extensions1_sub.py index 27b9cc6..3a3919f 100644 --- a/tests/extensions1_sub.py +++ b/tests/extensions1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/extensions1_sup.py b/tests/extensions1_sup.py index dd9b80a..a3351f9 100644 --- a/tests/extensions1_sup.py +++ b/tests/extensions1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/ipo1_sub.py b/tests/ipo1_sub.py index 01e5965..4fd7fcb 100644 --- a/tests/ipo1_sub.py +++ b/tests/ipo1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/ipo1_sup.py b/tests/ipo1_sup.py index 9828532..af04ab3 100644 --- a/tests/ipo1_sup.py +++ b/tests/ipo1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/ipo2_sub.py b/tests/ipo2_sub.py index 01e5965..4fd7fcb 100644 --- a/tests/ipo2_sub.py +++ b/tests/ipo2_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/ipo2_sup.py b/tests/ipo2_sup.py index 9828532..af04ab3 100644 --- a/tests/ipo2_sup.py +++ b/tests/ipo2_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/mapcleanname1_sub.py b/tests/mapcleanname1_sub.py index fc4dbd2..d1ff8c1 100644 --- a/tests/mapcleanname1_sub.py +++ b/tests/mapcleanname1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/mapcleanname1_sup.py b/tests/mapcleanname1_sup.py index b93a409..257c9b9 100644 --- a/tests/mapcleanname1_sup.py +++ b/tests/mapcleanname1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/nested_def1_sub.py b/tests/nested_def1_sub.py index 14bfb18..e13ea31 100644 --- a/tests/nested_def1_sub.py +++ b/tests/nested_def1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/nested_def1_sup.py b/tests/nested_def1_sup.py index 0032b18..1d54e5a 100644 --- a/tests/nested_def1_sup.py +++ b/tests/nested_def1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/out1_sub.py b/tests/out1_sub.py index abd3ce1..fa69988 100644 --- a/tests/out1_sub.py +++ b/tests/out1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/out1_sup.py b/tests/out1_sup.py index 26c0190..ed5fc32 100644 --- a/tests/out1_sup.py +++ b/tests/out1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/people_procincl1_sub.py b/tests/people_procincl1_sub.py index 8d3b5e7..bdb5d63 100644 --- a/tests/people_procincl1_sub.py +++ b/tests/people_procincl1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/people_procincl1_sup.py b/tests/people_procincl1_sup.py index 9689e83..da0eeba 100644 --- a/tests/people_procincl1_sup.py +++ b/tests/people_procincl1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/prefix_classname1_sub.py b/tests/prefix_classname1_sub.py index df7507a..18c80fc 100644 --- a/tests/prefix_classname1_sub.py +++ b/tests/prefix_classname1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/prefix_classname1_sup.py b/tests/prefix_classname1_sup.py index e4db412..92afac2 100644 --- a/tests/prefix_classname1_sup.py +++ b/tests/prefix_classname1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/recursive_simpletype1_sub.py b/tests/recursive_simpletype1_sub.py index 336b026..8518e2d 100644 --- a/tests/recursive_simpletype1_sub.py +++ b/tests/recursive_simpletype1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/recursive_simpletype1_sup.py b/tests/recursive_simpletype1_sup.py index 45de91d..7a2e836 100644 --- a/tests/recursive_simpletype1_sup.py +++ b/tests/recursive_simpletype1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/reference_simpletype1_sub.py b/tests/reference_simpletype1_sub.py index 9297c7a..84a31d3 100644 --- a/tests/reference_simpletype1_sub.py +++ b/tests/reference_simpletype1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/reference_simpletype1_sup.py b/tests/reference_simpletype1_sup.py index cc8178a..941fa28 100644 --- a/tests/reference_simpletype1_sup.py +++ b/tests/reference_simpletype1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/rem_dup_elems1_sub.py b/tests/rem_dup_elems1_sub.py index c9f7ba4..4f13ab1 100644 --- a/tests/rem_dup_elems1_sub.py +++ b/tests/rem_dup_elems1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/rem_dup_elems1_sup.py b/tests/rem_dup_elems1_sup.py index c21b87f..cee7640 100644 --- a/tests/rem_dup_elems1_sup.py +++ b/tests/rem_dup_elems1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/simplecontent_restriction1_sub.py b/tests/simplecontent_restriction1_sub.py index 8ed52f9..580c6d2 100644 --- a/tests/simplecontent_restriction1_sub.py +++ b/tests/simplecontent_restriction1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/simplecontent_restriction1_sup.py b/tests/simplecontent_restriction1_sup.py index ae5f74a..7056a19 100644 --- a/tests/simplecontent_restriction1_sup.py +++ b/tests/simplecontent_restriction1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/simpletype_memberspecs1_sub.py b/tests/simpletype_memberspecs1_sub.py index 908d5c4..a260c88 100644 --- a/tests/simpletype_memberspecs1_sub.py +++ b/tests/simpletype_memberspecs1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/simpletype_memberspecs1_sup.py b/tests/simpletype_memberspecs1_sup.py index ec34c2a..307d905 100644 --- a/tests/simpletype_memberspecs1_sup.py +++ b/tests/simpletype_memberspecs1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/simpletypes_other1_sub.py b/tests/simpletypes_other1_sub.py index 4792c10..6afe089 100644 --- a/tests/simpletypes_other1_sub.py +++ b/tests/simpletypes_other1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/simpletypes_other1_sup.py b/tests/simpletypes_other1_sup.py index 1c58d5c..1dcf61f 100644 --- a/tests/simpletypes_other1_sup.py +++ b/tests/simpletypes_other1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/to_etree1_sub.py b/tests/to_etree1_sub.py index de64934..300d89c 100644 --- a/tests/to_etree1_sub.py +++ b/tests/to_etree1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/to_etree1_sup.py b/tests/to_etree1_sup.py index 09ba4c3..17befe2 100644 --- a/tests/to_etree1_sup.py +++ b/tests/to_etree1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/validate_simpletypes1_sub.py b/tests/validate_simpletypes1_sub.py index e0f4a98..3edf739 100644 --- a/tests/validate_simpletypes1_sub.py +++ b/tests/validate_simpletypes1_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/validate_simpletypes1_sup.py b/tests/validate_simpletypes1_sup.py index 03af44f..d159830 100644 --- a/tests/validate_simpletypes1_sup.py +++ b/tests/validate_simpletypes1_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/validate_simpletypes1_warnings.txt b/tests/validate_simpletypes1_warnings.txt index c166f0e..ecb033a 100644 --- a/tests/validate_simpletypes1_warnings.txt +++ b/tests/validate_simpletypes1_warnings.txt @@ -1,60 +1,60 @@ -tests/validate_simpletypes2_sup.py:1042: UserWarning: Value "2" does not match xsd minExclusive restriction on integer_range_1_st +tests/validate_simpletypes2_sup.py:1043: 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:1052: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']] +tests/validate_simpletypes2_sup.py:1053: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*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:1065: UserWarning: Value "floatxx" does not match xsd enumeration restriction on token_enum_st +tests/validate_simpletypes2_sup.py:1066: 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:1072: UserWarning: Value "22" does not match xsd maxInclusive restriction on integer_range_incl_st +tests/validate_simpletypes2_sup.py:1073: 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:1077: UserWarning: Value "-40" does not match xsd minExclusive restriction on integer_range_excl_st +tests/validate_simpletypes2_sup.py:1078: 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:1086: UserWarning: Value "mno pqr" does not match xsd minLength restriction on min_max_length_st +tests/validate_simpletypes2_sup.py:1087: 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:1091: UserWarning: Value "012345" does not match xsd length restriction on length_st +tests/validate_simpletypes2_sup.py:1092: 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:1168: UserWarning: Value "0.2" does not match xsd minInclusive restriction on anonymous_float_valueType +tests/validate_simpletypes2_sup.py:1169: 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:1162: UserWarning: Value "efgh" does not match xsd pattern restrictions: [['^abcd$|^ef\\|gh$']] +tests/validate_simpletypes2_sup.py:1163: UserWarning: Value "efgh" does not match xsd pattern restrictions: [['^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:1044: UserWarning: Value "9" does not match xsd maxExclusive restriction on integer_range_1_st +tests/validate_simpletypes2_sup.py:1045: 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:1052: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']] +tests/validate_simpletypes2_sup.py:1053: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*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:1070: UserWarning: Value "-50" does not match xsd minInclusive restriction on integer_range_incl_st +tests/validate_simpletypes2_sup.py:1071: 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:1084: UserWarning: Value "asdf asdf asdf asdf asdf asdf" does not match xsd maxLength restriction on min_max_length_st +tests/validate_simpletypes2_sup.py:1085: 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:1091: UserWarning: Value "01234567890" does not match xsd length restriction on length_st +tests/validate_simpletypes2_sup.py:1092: 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:1101: UserWarning: Value "2015-05-01" does not match xsd minInclusive restriction on date_minincl_st +tests/validate_simpletypes2_sup.py:1102: 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:1106: UserWarning: Value "2015-11-01" does not match xsd maxInclusive restriction on date_maxincl_st +tests/validate_simpletypes2_sup.py:1107: 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:1111: UserWarning: Value "2015-05-01" does not match xsd minExclusive restriction on date_minexcl_st +tests/validate_simpletypes2_sup.py:1112: 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:1116: UserWarning: Value "2015-11-01" does not match xsd maxExclusive restriction on date_maxexcl_st +tests/validate_simpletypes2_sup.py:1117: 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:1121: UserWarning: Value "13:30:00" does not match xsd minInclusive restriction on time_minincl_st +tests/validate_simpletypes2_sup.py:1122: 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:1126: UserWarning: Value "17:00:00" does not match xsd maxInclusive restriction on time_maxincl_st +tests/validate_simpletypes2_sup.py:1127: 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:1131: UserWarning: Value "13:30:00" does not match xsd minExclusive restriction on time_minexcl_st +tests/validate_simpletypes2_sup.py:1132: 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:1136: UserWarning: Value "17:00:00" does not match xsd maxExclusive restriction on time_maxexcl_st +tests/validate_simpletypes2_sup.py:1137: 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:1141: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minInclusive restriction on datetime_minincl_st +tests/validate_simpletypes2_sup.py:1142: 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:1146: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxInclusive restriction on datetime_maxincl_st +tests/validate_simpletypes2_sup.py:1147: 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:1151: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minExclusive restriction on datetime_minexcl_st +tests/validate_simpletypes2_sup.py:1152: 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:1156: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxExclusive restriction on datetime_maxexcl_st +tests/validate_simpletypes2_sup.py:1157: 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:1170: UserWarning: Value "6.6" does not match xsd maxInclusive restriction on anonymous_float_valueType +tests/validate_simpletypes2_sup.py:1171: 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:1049: UserWarning: Value "aaa12zzz" does not match xsd minLength restriction on pattern_st +tests/validate_simpletypes2_sup.py:1050: 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:1052: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']] +tests/validate_simpletypes2_sup.py:1053: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*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:1588: UserWarning: Value "pqrst" does not match xsd minLength restriction on simpleTwoElementTwoType +tests/validate_simpletypes2_sup.py:1589: 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_sub.py b/tests/validate_simpletypes2_sub.py index e0f4a98..3edf739 100644 --- a/tests/validate_simpletypes2_sub.py +++ b/tests/validate_simpletypes2_sub.py @@ -2,6 +2,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tests/validate_simpletypes2_sup.py b/tests/validate_simpletypes2_sup.py index 03af44f..d159830 100644 --- a/tests/validate_simpletypes2_sup.py +++ b/tests/validate_simpletypes2_sup.py @@ -3,6 +3,7 @@ # # Generated by generateDS.py. +# Python 2.7.13 (default, May 2 2017, 14:07:15) [GCC 6.3.0 20170406] # # Command line options: # ('--no-dates', '') diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html index 648e52e..fa7972f 100644 --- a/tutorial/generateds_tutorial.html +++ b/tutorial/generateds_tutorial.html @@ -3,7 +3,7 @@ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" /> +<meta name="generator" content="Docutils 0.14rc2.dev: http://docutils.sourceforge.net/" /> <title>generateDS -- Introduction and Tutorial</title> <meta name="author" content="Dave Kuhlman" /> <style type="text/css"> @@ -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.28a</td> +<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28b</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">June 23, 2017</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">August 22, 2017</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: 2017-06-23 23:12 UTC. +Generated on: 2017-08-22 19:57 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 69e9efd..1799a52 100644 --- a/tutorial/generateds_tutorial.txt +++ b/tutorial/generateds_tutorial.txt @@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial .. version -:revision: 2.28a +:revision: 2.28b .. version diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip index f103919d46c6d0eb3cb7128d9d41e5a87326d436..2f74d7acf124128c19fcfa4076aafdc1252d6cb1 100644 GIT binary patch delta 12868 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 delta 12850 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 Q0aBAazC#9Mxc~qF0HY;ZyZ`_I -- GitLab