From 71bf0f851aeaa64b925d41eb5f28db281f33d690 Mon Sep 17 00:00:00 2001
From: Dave Kuhlman <dkuhlman@davekuhlman.org>
Date: Wed, 25 Oct 2017 20:44:48 -0700
Subject: [PATCH] Fix for child with ref= refering to global xs:element

---
 README.rst                        |  10 ++++++++++
 django/gends_generate_django.py   |  14 +++++++++++---
 django/generatedssuper.py         |  12 ++++++------
 gends_user_methods.py             |  15 ++++++++-------
 generateDS.html                   |  30 +++++++++++++++---------------
 generateDS.py                     |   6 +++++-
 generateDS.txt                    |  26 +++++++++++++-------------
 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 +-
 tutorial/generateds_tutorial.html |   6 +++---
 tutorial/generateds_tutorial.txt  |   2 +-
 tutorial/generateds_tutorial.zip  | Bin 48767 -> 48768 bytes
 upload_pypi                       |   6 +++++-
 18 files changed, 88 insertions(+), 61 deletions(-)

diff --git a/README.rst b/README.rst
index 947c2d4..c92f28f 100644
--- a/README.rst
+++ b/README.rst
@@ -141,6 +141,16 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 Change history
 --------------
 
+Version 2.28d (10/25/2017)
+
+- Fix for incorrect resolution of type for a child element type
+  defined with <xs:element ref="Abc"/>.  The ref= can refer to a
+  global (top level) xs:element rather than an xs:complexType, in
+  which case we need to use the type= to determine the
+  xs:complexType.  Thanks to Bob Barcklay and Olof Kindgren for
+  reporting this issue and for working with me on this and helping
+  to track down the fix.
+
 Version 2.28c (10/17/2017)
 
 - Fix for generation of GDSClassesMapping dictionary.  Formerly, we
diff --git a/django/gends_generate_django.py b/django/gends_generate_django.py
index 28e7913..056f6d0 100755
--- a/django/gends_generate_django.py
+++ b/django/gends_generate_django.py
@@ -69,6 +69,14 @@ class Writer(object):
 #
 
 def generate_model(options, module_name):
+
+    if options.class_suffixes:
+        model_suffix = '_model'
+        form_suffix = '_form'
+    else:
+        model_suffix = ''
+        form_suffix = ''
+
     global supermod
     try:
         import generatedssuper
@@ -122,14 +130,14 @@ def generate_model(options, module_name):
     for class_name in supermod.__all__:
         class_name = unique_name_map.get(class_name)
         if first_time:
-            wrtadmin('    %s_model' % (class_name, ))
+            wrtadmin('    %s%s' % (class_name, model_suffix ))
             first_time = False
         else:
-            wrtadmin(', \\\n    %s_model' % (class_name, ))
+            wrtadmin(', \\\n    %s%s' % (class_name, model_suffix ))
     wrtadmin('\n\n')
     for class_name in supermod.__all__:
         class_name = unique_name_map.get(class_name)
-        wrtadmin('admin.site.register(%s_model)\n' % (class_name, ))
+        wrtadmin('admin.site.register(%s%s)\n' % (class_name, model_suffix ))
     wrtadmin('\n')
     models_writer.close()
     forms_writer.close()
diff --git a/django/generatedssuper.py b/django/generatedssuper.py
index daec5d6..62f4d33 100644
--- a/django/generatedssuper.py
+++ b/django/generatedssuper.py
@@ -168,8 +168,8 @@ class GeneratedsSuper(object):
         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__, ))
+            wrtmodels('    %s = models.ForeignKey("%s%s")\n' % (
+                cls.superclass.__name__, cls.superclass.__name__, model_suffix, ))
         for spec in cls.member_data_items_:
             name = spec.get_name()
             prefix, name = cls.get_prefix_name(name)
@@ -237,8 +237,8 @@ class GeneratedsSuper(object):
                 if mapped_type is not None:
                     clean_data_type = mapped_type
                 wrtmodels(
-                    '    %s = models.ForeignKey(\n        "%s_model",\n' % (
-                        name, clean_data_type, ))
+                    '    %s = models.ForeignKey(\n        "%s%s",\n' % (
+                        name, clean_data_type, model_suffix, ))
                 wrtmodels(
                     '        related_name="{}_{}_{}",\n'.format(
                         class_name, name, clean_data_type, ))
@@ -247,9 +247,9 @@ class GeneratedsSuper(object):
                         '        blank=True, null=True,\n')
                 wrtmodels('    )\n')
                 wrtforms(
-                    '    %s = forms.MultipleChoiceField(%s_model.objects'
+                    '    %s = forms.MultipleChoiceField(%s%s.objects'
                     '.all())\n' % (
-                        name, clean_data_type, ))
+                        name, clean_data_type, model_suffix, ))
         wrtmodels('\n')
         wrtmodels('    def __unicode__(self):\n')
         wrtmodels('        return "id: %s" % (self.id, )\n')
diff --git a/gends_user_methods.py b/gends_user_methods.py
index c143a35..0ba8e4e 100755
--- a/gends_user_methods.py
+++ b/gends_user_methods.py
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 # -*- mode: pymode; coding: latin1; -*-
 
+from __future__ import print_function
 import sys
 import re
 
@@ -65,11 +66,11 @@ class MethodSpec(object):
         source = self.source % values_dict
         return source
     def show(self):
-        print 'specification:'
-        print '    name: %s' % (self.name, )
-        print self.source
-        print '    class_names: %s' % (self.class_names, )
-        print '    names pat  : %s' % (self.class_names_compiled.pattern, )
+        print('specification:')
+        print('    name: %s' % (self.name, ))
+        print(self.source)
+        print('    class_names: %s' % (self.class_names, ))
+        print('    names pat  : %s' % (self.class_names_compiled.pattern, ))
 
 
 #
@@ -120,7 +121,7 @@ method2 = MethodSpec(name='walk_and_show',
         global counter
         counter += 1
         depth += 1
-        print '%%d. class: %(class_name)s  depth: %%d' %% (counter, depth, )
+        print('%%d. class: %(class_name)s  depth: %%d' %% (counter, depth, ))
         members = %(class_name)s._member_data_items
         for member in members:
             s1 = member.get_name()
@@ -135,7 +136,7 @@ method2 = MethodSpec(name='walk_and_show',
                 else:
                     s4 = '<instance>'
             s5 = '%%s%%s%%s  %%s' %% (s1.ljust(16), s2.ljust(16), s3.rjust(4), s4, )
-            print '   ', s5
+            print('   ', s5)
         for member in members:
             if member.get_container():
                 for child in getattr(self, member.get_name()):
diff --git a/generateDS.html b/generateDS.html
index 11b7be4..b45e53e 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.28c</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28d</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">October 17, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">October 25, 2017</td>
 </tr>
 </tbody>
 </table>
@@ -982,18 +982,18 @@ session file in generateds_gui.py, the graphical front-end for
 generateDS.py.  Additional options on the command line can be
 used to override options in the session file.  A session file
 is an XML document, so you can modify it with a text editor.</dd>
-<dt>fix-type-names=&quot;oldname1:newname1;oldname2:newname2;...&quot; Fix up</dt>
-<dd><p class="first">(replace) complex type names.  Using this option will replace
-the following: (1) the 'name' attribute of a complexType; (2)
-the 'type' attribute of each element that refers to the type;
-and (3) the 'base' attribute of each extension that refers to
-the type.  These fixups happen before information is collected
-from the schema for code generation. Therefore, using this
-option is effectively equivalent to copying your schema, then
-editing it with your text editor, then generating code from the
-modified schema.  If a new name is not specified, the default is
-to replace the old name with the old name plus an added &quot;xx&quot;
-suffix.  Examples:</p>
+<dt>fix-type-names=&quot;oldname1:newname1;oldname2:newname2;...&quot;</dt>
+<dd><p class="first">Fix up (replace) complex type names.  Using this option will
+replace the following: (1) the 'name' attribute of a
+complexType; (2) the 'type' attribute of each element that
+refers to the type; and (3) the 'base' attribute of each
+extension that refers to the type.  These fixups happen before
+information is collected from the schema for code generation.
+Therefore, using this option is effectively equivalent to
+copying your schema, then editing it with your text editor, then
+generating code from the modified schema.  If a new name is not
+specified, the default is to replace the old name with the old
+name plus an added &quot;xx&quot; suffix.  Examples:</p>
 <pre class="last literal-block">
 $ generateDS.py --fix-type-names=&quot;type1:type1Aux&quot;
 $ generateDS.py --fix-type-names=&quot;type1;type2:type2Repl&quot;
@@ -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-10-17 23:02 UTC.
+Generated on: 2017-10-26 03:43 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 435cfa1..767a239 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.28c'
+VERSION = '2.28d'
 ##VERSION##
 
 if sys.version_info.major == 2:
@@ -3795,6 +3795,10 @@ def generateBuildStandard_1(
         type_element = None
         abstract_child = False
         type_name = child.getAttrs().get('type')
+        elementDef = ElementDict.get(name)
+        if elementDef is not None:
+            if elementDef.getName() != elementDef.getType():
+                type_name = elementDef.getType()
         if type_name:
             type_element = ElementDict.get(type_name)
         if type_element and type_element.isAbstract():
diff --git a/generateDS.txt b/generateDS.txt
index 70b78dd..732fedb 100644
--- a/generateDS.txt
+++ b/generateDS.txt
@@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema
 
 .. version
 
-:revision: 2.28c
+:revision: 2.28d
 
 .. version
 
@@ -705,18 +705,18 @@ session=mysession.session
     used to override options in the session file.  A session file
     is an XML document, so you can modify it with a text editor.
 
-fix-type-names="oldname1:newname1;oldname2:newname2;..." Fix up
-    (replace) complex type names.  Using this option will replace
-    the following: (1) the 'name' attribute of a complexType; (2)
-    the 'type' attribute of each element that refers to the type;
-    and (3) the 'base' attribute of each extension that refers to
-    the type.  These fixups happen before information is collected
-    from the schema for code generation. Therefore, using this
-    option is effectively equivalent to copying your schema, then
-    editing it with your text editor, then generating code from the
-    modified schema.  If a new name is not specified, the default is
-    to replace the old name with the old name plus an added "xx"
-    suffix.  Examples::
+fix-type-names="oldname1:newname1;oldname2:newname2;..."
+    Fix up (replace) complex type names.  Using this option will
+    replace the following: (1) the 'name' attribute of a
+    complexType; (2) the 'type' attribute of each element that
+    refers to the type; and (3) the 'base' attribute of each
+    extension that refers to the type.  These fixups happen before
+    information is collected from the schema for code generation.
+    Therefore, using this option is effectively equivalent to
+    copying your schema, then editing it with your text editor, then
+    generating code from the modified schema.  If a new name is not
+    specified, the default is to replace the old name with the old
+    name plus an added "xx" suffix.  Examples::
 
         $ generateDS.py --fix-type-names="type1:type1Aux"
         $ generateDS.py --fix-type-names="type1;type2:type2Repl"
diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html
index 2479268..38ecf0e 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.28c</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28d</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">October 17, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">October 25, 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-10-17 23:02 UTC.
+Generated on: 2017-10-26 03:43 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 3a247b8..9261aae 100644
--- a/generateds_gui_notes.txt
+++ b/generateds_gui_notes.txt
@@ -12,7 +12,7 @@ GenerateDS GUI Notes
 
 .. version
 
-:revision: 2.28c
+:revision: 2.28d
 
 .. version
 
diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index 11d4df3..7f4ae3f 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.28c'
+VERSION = '2.28d'
 ##VERSION##
 
 
diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html
index 8f1804c..6b29b61 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.28c</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28d</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">October 17, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">October 25, 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-10-17 23:02 UTC.
+Generated on: 2017-10-26 03:43 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 b7c0427..5a57e32 100644
--- a/librarytemplate_howto.txt
+++ b/librarytemplate_howto.txt
@@ -8,7 +8,7 @@ How to package a generateDS.py generated library
 
 .. version
 
-:revision: 2.28c
+:revision: 2.28d
 
 .. version
 
diff --git a/process_includes.py b/process_includes.py
index 44994d4..27b5f90 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.28c'
+VERSION = '2.28d'
 ##VERSION##
 
 CatalogDict = {}
diff --git a/setup.py b/setup.py
index b9cc215..cbbf5ee 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.28c",
+    version="2.28d",
 ##VERSION##
     author="Dave Kuhlman",
     author_email="dkuhlman@davekuhlman.org",
diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html
index 3d47d0e..db088b5 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.28c</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.28d</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">October 17, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">October 25, 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-10-17 23:02 UTC.
+Generated on: 2017-10-26 03:43 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 a6b58d9..daebabc 100644
--- a/tutorial/generateds_tutorial.txt
+++ b/tutorial/generateds_tutorial.txt
@@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial
 
 .. version
 
-:revision: 2.28c
+:revision: 2.28d
 
 .. version
 
diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip
index 676114fd0f335a01efc2f88ff7c37796030dd3ef..bd9d2b9e08cbe1ac9200b64202aed4a3bd5e44d2 100644
GIT binary patch
delta 11948
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%0DjL9
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

delta 11908
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
K24cAY0002}?1TgW

diff --git a/upload_pypi b/upload_pypi
index 37a8a71..7522f2d 100755
--- a/upload_pypi
+++ b/upload_pypi
@@ -1,4 +1,8 @@
 #!/bin/bash -v
 # python setup.py sdist --formats=gztar upload
 # python setup.py bdist_egg upload
-python setup.py register sdist --formats=gztar bdist_egg upload
+#python setup.py register sdist --formats=gztar bdist_egg upload
+#
+# for info, see:
+#    https://packaging.python.org/tutorials/distributing-packages/#packaging-and-distributing-projects
+twine upload dist/generateDS-2.28rc0-py2.7.egg dist/generateDS-2.28rc0.tar.gz
-- 
GitLab