From d2a5f1e4c1f51aeb1b875d51a2a2f19ce0867d11 Mon Sep 17 00:00:00 2001 From: Dave Kuhlman <dkuhlman@davekuhlman.org> Date: Thu, 13 Oct 2016 15:31:43 -0700 Subject: [PATCH] Fix for MixedContainer export call mismatch --- README | 5 +- generateDS.html | 4 +- generateDS.py | 3 +- generateds_gui_notes.html | 4 +- librarytemplate_howto.html | 4 +- tests/OnePer/oneperType00_2One.py | 3 +- tests/OnePer/oneperType01_2One.py | 3 +- tests/OnePer/oneperType02_2One.py | 3 +- tests/OnePer/oneperType03_2One.py | 3 +- tests/abstract_type1_sup.py | 3 +- tests/annotations1_sup.py | 3 +- tests/anonymous_type1_sup.py | 3 +- tests/anysimpletype1_sup.py | 3 +- tests/anywildcard1_sup.py | 3 +- tests/attr_groups1_sup.py | 3 +- tests/catalogtest1_sup.py | 3 +- tests/cdata1_sup.py | 3 +- tests/cleanupname1_sup.py | 3 +- tests/copy_all | 2 + tests/defaults_cases1_sup.py | 3 +- tests/defaults_coverage1_sup.py | 3 +- tests/extensions1_sup.py | 3 +- tests/ipo1_sup.py | 3 +- tests/ipo2_sup.py | 3 +- tests/mapcleanname1_sup.py | 3 +- tests/nested_def1_sup.py | 3 +- tests/out1_sup.py | 8 +- tests/people_procincl1_sup.py | 8 +- tests/prefix_classname1_sup.py | 8 +- tests/recursive_simpletype1_sup.py | 3 +- tests/reference_simpletype1_sup.py | 3 +- tests/simplecontent_restriction1_sup.py | 3 +- tests/simpletype_memberspecs1_sup.py | 3 +- tests/simpletypes_other1_sup.py | 3 +- tests/test.py | 133 ++++++++++++----------- tests/to_etree1_sup.py | 8 +- tests/validate_simpletypes1_sup.py | 3 +- tests/validate_simpletypes1_warnings.txt | 58 +++++----- tests/validate_simpletypes2_sup.py | 3 +- tutorial/generateds_tutorial.html | 4 +- tutorial/generateds_tutorial.zip | Bin 48766 -> 48767 bytes 41 files changed, 191 insertions(+), 139 deletions(-) diff --git a/README b/README index 588fc35..295bc42 100644 --- a/README +++ b/README @@ -141,12 +141,15 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Change history -------------- -Version 2.23c (10/05/2016) +Version 2.23c (10/13/2016) - Added entry_points to setup.py so that distutils will generate executable scripts for executable .py files (for example, generateDS.py and process_includes.py). Thanks to Michael Jenny for suggesting this and for showing the way to do it. +- Fixed function call signature mismatch in MixedContainer call to + export method. Thanks to Lev Israel for catching this and + providing the solution. Version 2.23b (09/26/2016) diff --git a/generateDS.html b/generateDS.html index 02e5c5f..e58fca6 100644 --- a/generateDS.html +++ b/generateDS.html @@ -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 05, 2016</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">October 13, 2016</td> </tr> </tbody> </table> @@ -3180,7 +3180,7 @@ following among others:</p> <div class="footer"> <hr class="footer" /> <a class="reference external" href="generateDS.txt">View document source</a>. -Generated on: 2016-10-05 22:04 UTC. +Generated on: 2016-10-13 22:29 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 03b1679..9aa3fa8 100755 --- a/generateDS.py +++ b/generateDS.py @@ -5457,7 +5457,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html index c40dc24..4906de5 100644 --- a/generateds_gui_notes.html +++ b/generateds_gui_notes.html @@ -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 05, 2016</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">October 13, 2016</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: 2016-10-05 22:04 UTC. +Generated on: 2016-10-13 22:29 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.html b/librarytemplate_howto.html index 0316f0f..84adafc 100644 --- a/librarytemplate_howto.html +++ b/librarytemplate_howto.html @@ -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 05, 2016</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">October 13, 2016</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: 2016-10-05 22:04 UTC. +Generated on: 2016-10-13 22:29 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/tests/OnePer/oneperType00_2One.py b/tests/OnePer/oneperType00_2One.py index 9bd4049..bb1a48b 100644 --- a/tests/OnePer/oneperType00_2One.py +++ b/tests/OnePer/oneperType00_2One.py @@ -547,7 +547,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/OnePer/oneperType01_2One.py b/tests/OnePer/oneperType01_2One.py index e05090d..af44b2c 100644 --- a/tests/OnePer/oneperType01_2One.py +++ b/tests/OnePer/oneperType01_2One.py @@ -547,7 +547,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/OnePer/oneperType02_2One.py b/tests/OnePer/oneperType02_2One.py index 0e4b4de..4c66103 100644 --- a/tests/OnePer/oneperType02_2One.py +++ b/tests/OnePer/oneperType02_2One.py @@ -547,7 +547,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/OnePer/oneperType03_2One.py b/tests/OnePer/oneperType03_2One.py index ba20f12..bc486fd 100644 --- a/tests/OnePer/oneperType03_2One.py +++ b/tests/OnePer/oneperType03_2One.py @@ -547,7 +547,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/abstract_type1_sup.py b/tests/abstract_type1_sup.py index 4c11a20..2605227 100644 --- a/tests/abstract_type1_sup.py +++ b/tests/abstract_type1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/annotations1_sup.py b/tests/annotations1_sup.py index f6b6175..5c615e2 100644 --- a/tests/annotations1_sup.py +++ b/tests/annotations1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/anonymous_type1_sup.py b/tests/anonymous_type1_sup.py index 866370c..565f1d0 100644 --- a/tests/anonymous_type1_sup.py +++ b/tests/anonymous_type1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/anysimpletype1_sup.py b/tests/anysimpletype1_sup.py index 272aff7..bc66620 100644 --- a/tests/anysimpletype1_sup.py +++ b/tests/anysimpletype1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/anywildcard1_sup.py b/tests/anywildcard1_sup.py index 5a07f80..872cf51 100644 --- a/tests/anywildcard1_sup.py +++ b/tests/anywildcard1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/attr_groups1_sup.py b/tests/attr_groups1_sup.py index 448892e..2de44a5 100644 --- a/tests/attr_groups1_sup.py +++ b/tests/attr_groups1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/catalogtest1_sup.py b/tests/catalogtest1_sup.py index d3b484e..8cd42d3 100644 --- a/tests/catalogtest1_sup.py +++ b/tests/catalogtest1_sup.py @@ -547,7 +547,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/cdata1_sup.py b/tests/cdata1_sup.py index 6cc7968..b991443 100644 --- a/tests/cdata1_sup.py +++ b/tests/cdata1_sup.py @@ -547,7 +547,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/cleanupname1_sup.py b/tests/cleanupname1_sup.py index 694dc33..e1a5c88 100644 --- a/tests/cleanupname1_sup.py +++ b/tests/cleanupname1_sup.py @@ -547,7 +547,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/copy_all b/tests/copy_all index f62e238..62b953a 100755 --- a/tests/copy_all +++ b/tests/copy_all @@ -53,3 +53,5 @@ cp nested_def2_sup.py nested_def1_sup.py cp nested_def2_sub.py nested_def1_sub.py cp cleanupname2_sup.py cleanupname1_sup.py cp cleanupname2_sub.py cleanupname1_sub.py +cp catalogtest2_sup.py catalogtest1_sup.py +cp catalogtest2_sub.py catalogtest1_sub.py diff --git a/tests/defaults_cases1_sup.py b/tests/defaults_cases1_sup.py index 5587482..82d9b6d 100644 --- a/tests/defaults_cases1_sup.py +++ b/tests/defaults_cases1_sup.py @@ -545,7 +545,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/defaults_coverage1_sup.py b/tests/defaults_coverage1_sup.py index 53181cf..ddec7e9 100644 --- a/tests/defaults_coverage1_sup.py +++ b/tests/defaults_coverage1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/extensions1_sup.py b/tests/extensions1_sup.py index f19e9c8..9926473 100644 --- a/tests/extensions1_sup.py +++ b/tests/extensions1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/ipo1_sup.py b/tests/ipo1_sup.py index 2356f80..a828cba 100644 --- a/tests/ipo1_sup.py +++ b/tests/ipo1_sup.py @@ -545,7 +545,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/ipo2_sup.py b/tests/ipo2_sup.py index 2356f80..a828cba 100644 --- a/tests/ipo2_sup.py +++ b/tests/ipo2_sup.py @@ -545,7 +545,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/mapcleanname1_sup.py b/tests/mapcleanname1_sup.py index 17eb975..d7837d3 100644 --- a/tests/mapcleanname1_sup.py +++ b/tests/mapcleanname1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/nested_def1_sup.py b/tests/nested_def1_sup.py index cf12e33..fed05aa 100644 --- a/tests/nested_def1_sup.py +++ b/tests/nested_def1_sup.py @@ -545,7 +545,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/out1_sup.py b/tests/out1_sup.py index bb25128..e9dc161 100644 --- a/tests/out1_sup.py +++ b/tests/out1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( @@ -1832,7 +1833,10 @@ class programmer(person): self.eldatetime = dval_ elif nodeName_ == 'eltoken': eltoken_ = child_.text - eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip() + if eltoken_: + eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip() + else: + eltoken_ = "" eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken') self.eltoken = eltoken_ elif nodeName_ == 'elshort': diff --git a/tests/people_procincl1_sup.py b/tests/people_procincl1_sup.py index 9c13fe1..996caa3 100644 --- a/tests/people_procincl1_sup.py +++ b/tests/people_procincl1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( @@ -2471,7 +2472,10 @@ class programmer(person): self.eldate = dval_ elif nodeName_ == 'eltoken': eltoken_ = child_.text - eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip() + if eltoken_: + eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip() + else: + eltoken_ = "" eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken') self.eltoken = eltoken_ elif nodeName_ == 'elshort': diff --git a/tests/prefix_classname1_sup.py b/tests/prefix_classname1_sup.py index 7037b51..fa179c1 100644 --- a/tests/prefix_classname1_sup.py +++ b/tests/prefix_classname1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( @@ -1459,7 +1460,10 @@ class tomato_programmer(tomato_person): self.eldatetime = dval_ elif nodeName_ == 'eltoken': eltoken_ = child_.text - eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip() + if eltoken_: + eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip() + else: + eltoken_ = "" eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken') self.eltoken = eltoken_ elif nodeName_ == 'elshort': diff --git a/tests/recursive_simpletype1_sup.py b/tests/recursive_simpletype1_sup.py index 56a674c..06c6f8c 100644 --- a/tests/recursive_simpletype1_sup.py +++ b/tests/recursive_simpletype1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/reference_simpletype1_sup.py b/tests/reference_simpletype1_sup.py index 56ef4af..e27710f 100644 --- a/tests/reference_simpletype1_sup.py +++ b/tests/reference_simpletype1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/simplecontent_restriction1_sup.py b/tests/simplecontent_restriction1_sup.py index 6853e63..e9e28c9 100644 --- a/tests/simplecontent_restriction1_sup.py +++ b/tests/simplecontent_restriction1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/simpletype_memberspecs1_sup.py b/tests/simpletype_memberspecs1_sup.py index faf9c40..fc9e39c 100644 --- a/tests/simpletype_memberspecs1_sup.py +++ b/tests/simpletype_memberspecs1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/simpletypes_other1_sup.py b/tests/simpletypes_other1_sup.py index e7459e7..7431c18 100644 --- a/tests/simpletypes_other1_sup.py +++ b/tests/simpletypes_other1_sup.py @@ -546,7 +546,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/test.py b/tests/test.py index 71a7463..7558302 100755 --- a/tests/test.py +++ b/tests/test.py @@ -62,8 +62,8 @@ class GenTest(unittest.TestCase): self.compareFiles('out1_sup.py', 'out2_sup.py', ignore=()) self.compareFiles('out1_sub.py', 'out2_sub.py') # cleanup generated files - os.remove('out2_sup.py') - os.remove('out2_sub.py') + self.remove('out2_sup.py') + self.remove('out2_sub.py') def test_003_element_groups(self): cmdTempl = ( @@ -103,8 +103,8 @@ class GenTest(unittest.TestCase): ['value 2 1', 'group1 2', 'group2 2', 'value 2 2'] """) # cleanup generated files - os.remove('{}_sup.py'.format(t_)) - os.remove('{}_sub.py'.format(t_)) + self.remove('{}_sup.py'.format(t_)) + self.remove('{}_sub.py'.format(t_)) def test_004_valueof(self): cmdTempl = ( @@ -155,8 +155,8 @@ class GenTest(unittest.TestCase): ('child1', 'value1') """) # cleanup generated files - os.remove('{}_sup.py'.format(t_)) - os.remove('{}_sub.py'.format(t_)) + self.remove('{}_sup.py'.format(t_)) + self.remove('{}_sub.py'.format(t_)) ns_for_import_xml1 = """\ <root xmlns="http://a" xmlns:bl="http://blah"> @@ -212,8 +212,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('anysimpletype1_sub.py', '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_007_simpletype_memberspecs(self): cmdTempl = ( @@ -231,8 +231,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_008_extensions(self): cmdTempl = ( @@ -250,8 +250,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_009_literal(self): cmd = ( @@ -275,9 +275,9 @@ class GenTest(unittest.TestCase): infile.close() self.failUnlessEqual(content1, content2) # cleanup generated files - os.remove('literal2.py') - os.remove('out2_sup.py') - os.remove('out2_sub.py') + self.remove('literal2.py') + self.remove('out2_sup.py') + self.remove('out2_sub.py') def test_010_simplecontent_restriction(self): cmdTempl = ( @@ -295,8 +295,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_011_annotations(self): cmdTempl = ( @@ -314,8 +314,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_012_abstract_type(self): cmdTempl = ( @@ -333,8 +333,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_013_people_procincl(self): cmdTempl = ( @@ -353,8 +353,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_014_ipo(self): cmdTempl = ( @@ -376,7 +376,7 @@ class GenTest(unittest.TestCase): self.executeClean(cmd, cwd='..') self.compareFiles('{}1_out.xml'.format(t_), '{}2_out.xml'.format(t_)) # cleanup generated files - os.remove('{}2_out.xml'.format(t_)) + self.remove('{}2_out.xml'.format(t_)) def test_015_recursive_simpletype(self): cmdTempl = ( @@ -395,8 +395,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_016_anywildcard(self): cmdTempl = ( @@ -415,8 +415,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_017_attr_groups(self): cmdTempl = ( @@ -435,8 +435,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_018_simpletypes_other(self): cmdTempl = ( @@ -455,8 +455,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_019_to_etree(self): cmdTempl = ( @@ -486,9 +486,9 @@ class GenTest(unittest.TestCase): outfile.close() self.compareFiles('{}1.xml'.format(t_), '{}2.xml'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) - os.remove('{}2.xml'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) + self.remove('{}2.xml'.format(t_)) def test_020_catalogtest(self): cmdTempl = ( @@ -508,8 +508,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_021_anonymous_type(self): cmdTempl = ( @@ -528,8 +528,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_022_one_per(self): cmdTempl = ( @@ -560,10 +560,10 @@ class GenTest(unittest.TestCase): 'OnePer{}{}Type03_2One.py'.format(os.sep, t_), ('sys.stdout.write',)) # cleanup generated files - os.remove('OnePer{}{}Type00_1One.py'.format(os.sep, t_)) - os.remove('OnePer{}{}Type01_1One.py'.format(os.sep, t_)) - os.remove('OnePer{}{}Type02_1One.py'.format(os.sep, t_)) - os.remove('OnePer{}{}Type03_1One.py'.format(os.sep, t_)) + self.remove('OnePer{}{}Type00_1One.py'.format(os.sep, t_)) + self.remove('OnePer{}{}Type01_1One.py'.format(os.sep, t_)) + self.remove('OnePer{}{}Type02_1One.py'.format(os.sep, t_)) + self.remove('OnePer{}{}Type03_1One.py'.format(os.sep, t_)) def test_023_mapcleanname(self): cmdTempl = ( @@ -582,8 +582,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_024_prefix_classname(self): cmdTempl = ( @@ -607,9 +607,9 @@ class GenTest(unittest.TestCase): self.executeClean(cmd, cwd='..') self.compareFiles('{}1_out.xml'.format(t_), '{}2_out.xml'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) - os.remove('{}2_out.xml'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_out.xml'.format(t_)) def test_025_validate_simpletypes(self): cmdTempl = ( @@ -638,8 +638,8 @@ class GenTest(unittest.TestCase): self.compareFiles( '{}1_warnings.txt'.format(t_), '{}2_warnings.txt'.format(t_)) # cleanup generated files - os.remove('{}2_out.xml'.format(t_)) - os.remove('{}2_warnings.txt'.format(t_)) + self.remove('{}2_out.xml'.format(t_)) + self.remove('{}2_warnings.txt'.format(t_)) def test_026_reference_simpletype(self): cmdTempl = ( @@ -658,8 +658,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_027_cdata(self): cmdTempl = ( @@ -694,9 +694,9 @@ class GenTest(unittest.TestCase): cdatalist.export(outfile, 0) self.compareFiles('{}1.xml'.format(t_), '{}2.xml'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) - os.remove('{}2.xml'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) + self.remove('{}2.xml'.format(t_)) def test_028_defaults_coverage(self): cmdTempl = ( @@ -715,8 +715,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def test_029_defaults_cases(self): cmdTempl = ( @@ -739,9 +739,9 @@ class GenTest(unittest.TestCase): self.executeClean(cmd, cwd='..') self.compareFiles('{}1_out.xml'.format(t_), '{}2_out.xml'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) - os.remove('{}2_out.xml'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_out.xml'.format(t_)) def test_030_nested_def(self): cmdTempl = ( @@ -765,9 +765,9 @@ class GenTest(unittest.TestCase): self.executeClean(cmd, cwd='..') self.compareFiles('{}1_out.xml'.format(t_), '{}2_out.xml'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) - os.remove('{}2_out.xml'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_out.xml'.format(t_)) # # Test enhancements to cleanupName function. @@ -794,8 +794,8 @@ class GenTest(unittest.TestCase): ('sys.stdout.write',)) self.compareFiles('{}1_sub.py'.format(t_), '{}2_sub.py'.format(t_)) # cleanup generated files - os.remove('{}2_sup.py'.format(t_)) - os.remove('{}2_sub.py'.format(t_)) + self.remove('{}2_sup.py'.format(t_)) + self.remove('{}2_sub.py'.format(t_)) def compareFiles(self, left, right, ignore=None): with open(left) as left_file: @@ -807,6 +807,9 @@ class GenTest(unittest.TestCase): diffs = ''.join(diffs[2:12]) self.fail("Files differed:\n{}".format(diffs)) + def remove(self, filename): + os.remove(filename) + # Make the test suite. def suite(): diff --git a/tests/to_etree1_sup.py b/tests/to_etree1_sup.py index b51a98f..6d0f7c6 100644 --- a/tests/to_etree1_sup.py +++ b/tests/to_etree1_sup.py @@ -548,7 +548,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( @@ -1511,7 +1512,10 @@ class programmerType(personType): self.eldatetime1 = dval_ elif nodeName_ == 'eltoken': eltoken_ = child_.text - eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip() + if eltoken_: + eltoken_ = re_.sub(String_cleanup_pat_, " ", eltoken_).strip() + else: + eltoken_ = "" eltoken_ = self.gds_validate_string(eltoken_, node, 'eltoken') self.eltoken = eltoken_ elif nodeName_ == 'elshort': diff --git a/tests/validate_simpletypes1_sup.py b/tests/validate_simpletypes1_sup.py index bdfb38b..3659a7d 100644 --- a/tests/validate_simpletypes1_sup.py +++ b/tests/validate_simpletypes1_sup.py @@ -545,7 +545,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tests/validate_simpletypes1_warnings.txt b/tests/validate_simpletypes1_warnings.txt index 7b272bc..6f65004 100644 --- a/tests/validate_simpletypes1_warnings.txt +++ b/tests/validate_simpletypes1_warnings.txt @@ -1,58 +1,58 @@ -tests/validate_simpletypes2_sup.py:980: UserWarning: Value "2" does not match xsd minExclusive restriction on integer_range_1_st +tests/validate_simpletypes2_sup.py:981: 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:990: UserWarning: Value "mmaaa1234mnopzzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']] +tests/validate_simpletypes2_sup.py:991: 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:1003: UserWarning: Value "floatxx" does not match xsd enumeration restriction on token_enum_st +tests/validate_simpletypes2_sup.py:1004: 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:1010: UserWarning: Value "22" does not match xsd maxInclusive restriction on integer_range_incl_st +tests/validate_simpletypes2_sup.py:1011: 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:1015: UserWarning: Value "-40" does not match xsd minExclusive restriction on integer_range_excl_st +tests/validate_simpletypes2_sup.py:1016: 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:1024: UserWarning: Value "mno pqr" does not match xsd minLength restriction on min_max_length_st +tests/validate_simpletypes2_sup.py:1025: 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:1029: UserWarning: Value "012345" does not match xsd length restriction on length_st +tests/validate_simpletypes2_sup.py:1030: 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:1099: UserWarning: Value "0.2" does not match xsd minInclusive restriction on anonymous_float_valueType +tests/validate_simpletypes2_sup.py:1100: 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:982: UserWarning: Value "9" does not match xsd maxExclusive restriction on integer_range_1_st +tests/validate_simpletypes2_sup.py:983: 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:990: UserWarning: Value "aaa1234mnopzzzbcd" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']] +tests/validate_simpletypes2_sup.py:991: 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:1008: UserWarning: Value "-50" does not match xsd minInclusive restriction on integer_range_incl_st +tests/validate_simpletypes2_sup.py:1009: 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:1022: UserWarning: Value "asdf asdf asdf asdf asdf asdf" does not match xsd maxLength restriction on min_max_length_st +tests/validate_simpletypes2_sup.py:1023: 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:1029: UserWarning: Value "01234567890" does not match xsd length restriction on length_st +tests/validate_simpletypes2_sup.py:1030: 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:1039: UserWarning: Value "2015-05-01" does not match xsd minInclusive restriction on date_minincl_st +tests/validate_simpletypes2_sup.py:1040: 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:1044: UserWarning: Value "2015-11-01" does not match xsd maxInclusive restriction on date_maxincl_st +tests/validate_simpletypes2_sup.py:1045: 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:1049: UserWarning: Value "2015-05-01" does not match xsd minExclusive restriction on date_minexcl_st +tests/validate_simpletypes2_sup.py:1050: 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:1054: UserWarning: Value "2015-11-01" does not match xsd maxExclusive restriction on date_maxexcl_st +tests/validate_simpletypes2_sup.py:1055: 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:1059: UserWarning: Value "13:30:00" does not match xsd minInclusive restriction on time_minincl_st +tests/validate_simpletypes2_sup.py:1060: 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:1064: UserWarning: Value "17:00:00" does not match xsd maxInclusive restriction on time_maxincl_st +tests/validate_simpletypes2_sup.py:1065: 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:1069: UserWarning: Value "13:30:00" does not match xsd minExclusive restriction on time_minexcl_st +tests/validate_simpletypes2_sup.py:1070: 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:1074: UserWarning: Value "17:00:00" does not match xsd maxExclusive restriction on time_maxexcl_st +tests/validate_simpletypes2_sup.py:1075: 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:1079: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minInclusive restriction on datetime_minincl_st +tests/validate_simpletypes2_sup.py:1080: 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:1084: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxInclusive restriction on datetime_maxincl_st +tests/validate_simpletypes2_sup.py:1085: 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:1089: UserWarning: Value "2015-06-01 13:20:10" does not match xsd minExclusive restriction on datetime_minexcl_st +tests/validate_simpletypes2_sup.py:1090: 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:1094: UserWarning: Value "2015-11-01 14:20:10" does not match xsd maxExclusive restriction on datetime_maxexcl_st +tests/validate_simpletypes2_sup.py:1095: 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:1101: UserWarning: Value "6.6" does not match xsd maxInclusive restriction on anonymous_float_valueType +tests/validate_simpletypes2_sup.py:1102: 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:987: UserWarning: Value "aaa12zzz" does not match xsd minLength restriction on pattern_st +tests/validate_simpletypes2_sup.py:988: 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:990: UserWarning: Value "aaa12zzz" does not match xsd pattern restrictions: [['^aaa.*zzz$', '^bbb.*xxx$'], ['^.*123.*$', '^.*456.*$']] +tests/validate_simpletypes2_sup.py:991: 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:1513: UserWarning: Value "pqrst" does not match xsd minLength restriction on simpleTwoElementTwoType +tests/validate_simpletypes2_sup.py:1514: 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 bdfb38b..3659a7d 100644 --- a/tests/validate_simpletypes2_sup.py +++ b/tests/validate_simpletypes2_sup.py @@ -545,7 +545,8 @@ class MixedContainer: elif self.category == MixedContainer.CategorySimple: self.exportSimple(outfile, level, name) else: # category == MixedContainer.CategoryComplex - self.value.export(outfile, level, namespace, name, pretty_print) + self.value.export( + outfile, level, namespace, name, pretty_print=pretty_print) def exportSimple(self, outfile, level, name): if self.content_type == MixedContainer.TypeString: outfile.write('<%s>%s</%s>' % ( diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html index c670d2f..6e3d467 100644 --- a/tutorial/generateds_tutorial.html +++ b/tutorial/generateds_tutorial.html @@ -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 05, 2016</td> +<tr class="field"><th class="field-name">date:</th><td class="field-body">October 13, 2016</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: 2016-10-05 22:04 UTC. +Generated on: 2016-10-13 22:29 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.zip b/tutorial/generateds_tutorial.zip index 0de1a5fda9d7ac479263d841bcba488ffbb32107..b43776a27c1672ffa3296d877d8bedfd5b46d742 100644 GIT binary patch delta 10826 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 Ul^c@-yBL#dz77Urxc~qF09i4d&j0`b delta 10818 zcmV-ID!tYJ`~v>`0<g6L372?9N#2VXheVUU0w@Olc=cCLaI@?JI|hGekoKIP&7M6# zk$*S>M7r2eaJZKWZ`~?!5}g7a&YlS0(oDqlDlx*DXbQvwG^eO@MlY*1>Qz#SSed9y z7Rm@%9$|dLss_3zet3T^J|vOKjk@&g$U!DV7qE@0LsZ#H8H|}`Nfp{R9kX)4dNehY z4z~{_sazO{K%@N>?GS$qsR3p*>3bvR$wZ}zlwg?xy%bkfwIyOH1l1+_yw<^i$pQ?j zIY!*kO1K9`eB6N7$iaeFQUI!OU=1c-oInZ^sC$_e7;Df0z_4Y)QG_`K(bXB^`L`cF z2otSTCYu{f1o9Bj>jNzn7;A%f#0#iYk+p@ZIzSFW;ADdY0vCU`$4ta~NcU2sy-O5W zTr3T&lvMy3QrriK<V3P*qxx3`cyK<%q7)Mc@JInT01KLm>I*&@vJG?-rd|*skUXZU z7eEEzl`go>nr?z75Sfq=1BXCLBteG&7*3Ck<DLf#u1`U70FR1NN8n&-iH!!}gk}Fa zlLsu%s_e@ITL*tHgleFJjYuL6q}*p{Gm0iw!sj+@TqY%$t+_4t8gRa_vTlq~6X2Ny z<p#l|$$UtCfgK(7{mK`2Mka}8qxtO5`N9-0{oj6=hI)Ag8hgY+mPb?-TB#6oKX=|a zIJ)igzH2sEuEgpQ$JWN3*a!)o4de<*dMR3k)E4p=co~1*XKC1ta+COCG{4x!?~`$; zHINBOlr(}&)`KDU<>(O?F*-x4Wf|g2<rG!`6K-@JX6P5fHDq9TvD;j)9r8~`^C#QL z{|wNCg+|30t4>A$G(pe=Lc_}-v_~LJG%sbbqVfWmEx=9XvBT@>X#R8?FI3-VlV~<Q z;&@wultq65zJ#1%XbKf2OHitXTFJWvyA6!Xv(fz7HZE@nf*67z90WpaTM>`aKvY>2 z3Pd-mO{KH2wNehnZve%~kXCxT1@HE3+!s<9StQ873`MQ<N$RkBj@S+8@Q{xD87n|9 z-+X+}FW8|WV4u>DVK{2X0z?_{1$!=|l|%0ZqBnn_!f%AzBHR}5;Ax%W@8h%-1q8(1 zBvmb0JyBn4kCU^r(fpeMjpUu8-AVSNc3k{@LPq3AcLFItB<rz)*ek})p>=$~rUpMS z|KALW+II|NEc!r13*-x+YARKPvqt(z6oE&mi!BY$3CAHUe}?U1hIIu8f#lCYc#P#m zgwB6MFet;;#CK)03r1`}7YMO)L=3}{L96meA4dpYgzFN*&rpUCm{nn1CJ@+%D_Q1P zIB@7aVe|%cfzZ1^^azfS0^v*<j<9eZi`<j2taIWdAva(_W=|QjAzy`<JweO>2r(0Z z?64NT(mqOo(amD5v!xk$hvz#yC@uT~G9Q1fk~D^AA%*&2!PZH&3Nv}Hqo^(o_)!Id zTml6lM42_1fm3)sqyuj)IAOsF1SbI8PXta_a2U4dV)h884&%$wXP85X<7`b!#pj6Y zfLaXW%AkY=MHc5V!bcK^)=DoixU-p0XhIx|fb0-R+SL9mo-Yv30sX+p1VP!Xz=D7J z+K2{}OB^0UPcZkC80nH71|Xi4NL^W{Rd^@Ux+UfL8KO9#C~rL|!e;(SDJ&GhQ1<Hz zBr1ocF-G|*gP%lD!PmRCH>}XcJO}3(Q~@sLS3GKfWl}p{Bd~Z{X54SY+BH3QnUSS^ zlT6tJ>iv@9+ad)HLS(zv<t-4Y)b)SO3jRV;>5~01$H8&~sTUA3sl-a9#j;K@SxmLQ z6_S%_Lz%h_{2>b#GJ=?*ka?m^7bIlozvw!^ywt%=*qp@)V4p0wBSGEQOTLF!0k)-u zklI~9V+VEGzIqEdOxwb2BY=G(02ZRbLJksC$c3(}qiY;1kZ+56+v{Wg9an!!>Q$Vl z-dQv%wWm7WU&~^IC{24fT_d|X<uWP(VTB{fqqL5}7!7b}Vxf6z1NS?UQU}$6gsTGu z$JT+U3`8)4$CQDDUj_>LWuT+QVo%XXV9_XeY|%)xMWf)@qLCOV8U=?Jjl_<kQ7~9E zDy+cyd5~p1Sq_W0x$IYVIt727H(T{UK~e%~i{obFMXlhrd<#5uoN0Ii7B1l`r;YQL zb<UMfVh)mHVS6!13JkjdYS1lsbO17QdHXs^QxLj=svs9b4Je&ivY{kY11rcR+q?#! zSeR>R`b@J=B8q1WRl5sa)G5gsM6jh&t?;1d1{zlqj1Lv}I(cc}_`!dS_Ad2<6$YRb zk(!wR^su!Z1moaRGZwq;_#AI^!lJZaXBZGE%PBkVVc_twbi0B^n_Y@MXi0=cAUFVl z5B!$#nDi{%x6&(L+iH3vx81(pgHqhaDOS_O$>+}~(w{${j%~22GVJ)=NpNk8R0SmP zGEII1%Q3(k+JlvU^N@dasy^RuezSHde}FH>U)`u0qZT;SY(WFo*@A{H$0A|r>fHh@ zkRRsmXUdg<Fv2|sUXSKY1pkVUs`CZ5{Z-6wAqs*Wb3%9A*s#ZtX1pIWpDyG5P{Epd zOCO{-$dW2s;NWadeguDgDQx71%@-u>k%SAe0u$;q4&jy<^&5Zs(<K<d&FK)bTd=T0 z!hlJbCbtiq4jcb=jD)$xlT+W0?%lPhA!p(fto{s{Yi9|$t7T0Hn>`y)a10@GbU_>i ze9La+8Vx7N`v;t^M=R>v`21jF*1?Xb%C&`#Q9D5*$$TSna4%qo!P$n5nLcHkN6uX@ z{u`1G0bT%o2@ZeO9gUT5;f_KsVC2LB$XPRNPlo6NG2Jq!-B`c{7@gJ^_^2E(z#~ul zjz4Iu5t;kO7jPI$t0$;4e)Ph?!33dzi~|z)YRidkyGTEh!iVV4^)jIK=z9h>6soja zPHkIS<!Atn>!4!%6kr12`qS+hWUttuk^f%H^wwHdtB-$U;RnaueB9N*b3qW^z26=5 z!_t78HH1(G*>ZweU59eUMkF<Mb_5nXsY9!?4A{|LnbsmwHIULT&P%Ljpf>=l;$%r# zP*XaE;6>*yp;X;q39AlX4B2T}+kCl8*y96qxHOWPpacxXX2k|)Zy-6e)V5K(S?RUF zpQ@#xAJBgiHSKex7j4>#8jH5#u&c5#)HOV;z;I+!u~%mxr_)pwNN#MV&!WKNNebc} zo>s~!B>>{>C4DzlXWGX}sW1}SG%WsPRBuj-sLUmZhbsgBEIJ$(VTk*hx<E01|25b; z*a{-Vj5$_Z63!W0)WJ}32d9wLY7&6m$#umg6p(+EI)(H?gZA(s7jDlL3cZA#aJ5X{ z(p-v+sEL5l9xI~)T+nJXl=)tjWWc1W4-O>1jzHiM;xSbua0kj_+u3YH*4Z39&oe>J zqTD61%|KoI033po^EV&gpOPV>0zsRabLs^E7_mn%3|zO;aJ|p6NazFOJ^&o?1AaHT zH?e=mR=RJ(VUlazVl5ggIuT{OIO-F&POhJdQVI>mwYKtiY>c(^!>Mj_d6`O*VjvgB zAT1tf>>*nUq`7Sqhhu29{9WV%lvc9D@^z^Oe5KK>AXuuS31>F5!1*8pvx|2AvBV0= zW9*?A`77})o82!UL>>{g)|z&0k<Qp?5PpBJS{TDr{0S%6wODBI*=<D>NRnjC+`-K7 z%P7Oq$P&v@W64&5pV4`z5%&n}I>?+KgN#jRDl~qQOUe*PB~(Vn;$5}YHVX1EbS-mM zRF|s+M)9x-3n?W3fFQ*Ol&u`e0Sn~y>(>~~(q%F|fcXl-K%DI5bmI?D0j|}7-%x*f zaMShM4-lrw<RWrD&FnE6<%TvW1V*Jxo|^lku#dIv0|Zv^8fWIp@DzqNX5{xw*39=z z&!DLTd0!?sR0-o@AM&#XXGj5L#!lU!55~%(4P$|lO$6sZJD`9u5IO)B-0j}55)O?Z z0Ym<^9fEvJz+>@zg$2vA*~Gr}MA(1P-c>aFBV3CO_L`}VoX}V$L@L-B21de1s8zwy zcCFyBVc05XsfV3Dp#QTC&l<x)h<{yeT1lj~*J~m0LnOjlHI4Ni86<{UHaNhBKvBJ> zFKn;@@Y`VBjp!5BIYfDqqa#eJAY&wwq3FPFj6t~pwO{kFKz(v*D{#Hybeex6e(qB$ z&^%CXp;Xs`J4EkkeeZBf$8GMn!{M@&i=;P=`4K@GmU;|Zn-ar7UH((EvZX5o9jHB2 z`f;W0fr56>E75i;*`JI>{eV)5BYM_WzlrSI2U8~mj8uSS?-SmA$~79?(9|Zju4F+4 z4XCC_qHWFjK2k+RE*rH^Bs70+#5InS<R;f8RaNQBjPz~6(=kgpBcbAe5(G{`7OD+T zB$EM>v6}>2pPhD%5I<{MRk%s+m=gkPEYfJKVxT9{wr7m?LofRm^YU94Xxe16A>+Yf z+6tbJ41F694u-rYX!9Bt4nhX?Z|95=qflFE2)aUc!i~4>MwKh*9F%{!|E{^)!!rCo zYAn~50)E8u1=5Lwox3f7O(aPfA_N)Ajtw}^5<uS2@g!tWJA6T5tBXQA58Iq2^I*_Q zJRmq^{AXzWt-mF=-SpWw@Z~-(e%C5*@MY3)wzGAnM=`j>328gLLWMuI^Ew^pczn>m z$2rb=zRb^aiBx}Z06Kq0uDuVKD+|b7$2OMAvEa)T?PQHj+S3*VgA=Y6v@um1oz_F; zo>+Ui)asE$>_h}zGCrWaM-Q7Hrm<gg7Ts#;FLq4FEyy5f1`BO&lZ;(~y%%XKY_{Z2 zY5t93?0{Ofur;YD*I-w}-qf_XV41J^Vj^!(@}NKA^9F+XF~EPdjlV{xQN^%?w>4uE zWV+mOd-oN{V`FUm=FX-#PG%k`86s|I$&`$pb#1;f^#5VBCr<kmLWzv4xdutE@MS#z z&L0Q%>h)a7p=dCnuf$Q~mOkVlpwr}TO8U%05EE}Epg)ZfQ0boIiN-O2Hs7*%VI^}H zRP@W7)OPBRO^bio6{6@&--k6_4?H_?-R8xnjXbUW2g<}uB(sx9iyn!7X%rG$_w)iw z0J(xti_`_y*z5qaR-R<wN*`&}&WL0jZ0kCX2_#ro2X|Cb>hCNosHM3D8dq&tLa8i{ z?)1M&-~t|yO#jMk`Q5dN^)_SY7Buq(Q;O}bmXi(|Qv!cSy}zTKwe8Th_+ZC#x{l+d z4KOIVW@d+$>8CAi(F*Rvj~jh?Amcl9<gM_ruW9d!b0*Z7+r|b59c?LS`1YOJa*JC` z-}erBC$+^Y5*9i*PI#KACuYoLVk34=X&p!#^4I$kIiu#4bDCtc(uK$9QtQgi{o1Js zHwBEubAx{qP7t<+B|mLbtWq={;2TWt3|dCG!Mebk#j?uhnibZ{@ac%6)oZ)erl$BH zaD!cT3%CqbhM9)E;{<LRrs__mr_K0Rl6R8JptTB~C1Ahkrup9ILM@lzC2j76*W*ah zOAMGbt_A8&v)w&w#1P%)5moIlsHE0s6F=g+1}A@)A~oJgBE^qxUREFh1%07X+|;fI z>?4C!`kKBd$`uG;?9jYi-#`k{V}7vambt8&nQH81>56(=P2;6WkgN!DEI{_oyu$CF z|8JZ`RV#BY0q`3)p3Q6%Hap*8zso}xB132O$<1?i`pdWAI1FUvj$=4T-?|$x+aM3F z$9sRJvU#)fY6|cA17A3RiHeRv4rs5<I#pnYqq(1QM+NP~kdwfx;>0Bu(75o&BLhts z6!56AH(AB`6x=`Sj@&sH?NwF-qRXNg=Hx!RJ6rmvpEO~)cS=B~<hCSmt2U?2k-eMa z;a;g;4h=%$^;0lIZhV?bhwmx30y9~svK)W!*gZfkD#o^91rEsgOk{tDrDI!x^M*pL z9pcS<)#>vOL<{`x87Y&8l5bBPM2t6VEYOO#{l6z#d46MVkB(WLStT7np1S|h0$XpU z4bB=#TQ|d6uGI;rGT9{#Re(>+I&&gGr=U|6FgO!d8Ud=Fq{M;X<j`2wK!A!nw*P-S zO!}05ql{1cr*U}u=<OKso{j^a*Wi1*aynaPM>eVwQMLjq;g~gz(}z>Poy~=VGQ3B8 ztJfxS*REC1LM;jn;T08$A_(Pf;l4C1fR*Y4h09fW--8pi(?`^CYiULf)n;25mOLuo z`oH$Bw7HGrXn)^dv5Cq7px_`W$w`0s7OkQwN>+uEQX*tICA&~dVo9w7?lQXoN#sL* zd#10s_5?^N$y;HSEpm^Uo}S*BKA!Fg1S%6*W5k%vMRYFa{$`Y$q7k45l0VJ_N4N}w zA4h`rlcnn#K|NrxXmg8uJR2Gl64xo?nSlHj$5`DYIx{b3mn(4W*v^~_PMm+jz!Y@B z<1{)e$EPeF;M&OAF~@eS_}`E}1>P+o!9Xl_#k><(e>GgEnJq6>Yc$1b*<FzvntXF} zY*siy_z{#_ZL_Sz4Jlgu$fdNx;x`^+XbB6ZZ3oX;LRb?tc7iNKVI>JcRk#v6^uCsR z2(Fnj?FnJC4^pl<_&7HnGyQ)71$vR_=5Fqk?cZ$)yJs-~jU>BoMi6QgD9Q|pPct%r zxc?!={*6x?7n*9vcIf*7w2J#fb_?1cer^Hm7~sEM;8H6)%w?uVxXx07%92WR1^S4U zs;;d&eksrxe^@Z6EP-v5qc~{nqfxz$y<$F~%D75xDq?dr1rUL~RuO-=Pq78nJOX1< z%sf$KU#`)1vw)J3XZLf)hj=f7hPX{8b5QN5LBm~tO|Ji-jL6yw?{c+P<kh08AZP;P zX!iEBVpOFQ-j1A_NW8yk?S|X|lCVc(CE9r0HgL0j$izr$0LrSLuFm=bf*I50!F~{` zAN5UzlD5)^C3mO`*&Tnp%~B|Bs<g2zl|S-KEpO_6P8YBZ_#qeU%)cN08r?+xRqh&o zJfg-mqzDx@0mE{ih8+0ux*q89UPS5nnghhtkJ7k-vld}|WsEj#zjrF$JA9WHsNO(7 z4%;e`2>UuBav&9jF7>T;kym(iY?C1b1U^IbS8?D@XYdFC2^D`69q8GIUMglEF4xcg zO{@rqt&=D4B3~s-{v8V=^Y3b%qF*p0+mi;YhR@G|5*ZiL#5pV`S-$2!qf2mUY1z6` z`hqW6l*WlWaD((9N9%^dqu>Dm?M${SFhI2-*wD&k8VZLtQTLLomncpwIlS$SMo7ti z_)XCZzi}wkf(3sM^asPx5g6owBQTZ(cmiYJ=@?Jjtf)@6P3jBP+~NJ}b;<z>u8U*E z;xIOeVCdRdZ%yi7XGgh@rzjy=jxbrpN56oLP=59V0xon@KkvE*pcprCMhaUnpBRw| zIlTeZvL2#iN$qfun*%`*2;Vtam?)$tjn9q)NP&2!E;xT%2y%lk8brP6>^|<?t<oVL zN`{pWynLcpv5t>=bI+d!_-@X?tpq#qvLqsbL8p{L3Fv-_pw@*(aJi8R+s?`Av<+?E zd_))#mr=OTV7D5XIk8Y?QGUtVAtz?rnWX(@PZzImoMbDWx`2~ZOnRxEEoTdnMFx$K zG6`j}V5om$k=ob$f}cVsV_V|j-Q67-oLv$J<>8_6JMw5aPU2;s7XEP1uPAA79nf=1 z?4?h9m)d9Bj%<g5i}=EanB{6OxXwtqm1mtQFZWD;O{>ygZ^4fgq~Y%_758^*W{`kV zJT?1WlPz0PUGYIFXJZmxo5O?n(&3V-OMnfbk%@mr%!#OQ`Upi-{rVh${^CF>*;?qi z&g|S{s$z+a=%O_f@@RW2$XftMh|`55e-#)+NqpeqWZ<B6%{_?IMQOshr@YdEr78Zs zRIj_FzhlB!c|oaE<vXU-2oQc<$gdV0A3#{wNdVzFglY9LvzHYOdQNEoh(XfIVV_hL zkote~Yz5l@e$Nmrz#2u0a;F*iN#?4V-ZyiliG+Q8EBt-93yO!U&FaoXvA~uNSf!dD zBy;->RBa)vniXVLN-g5YqDQTZaj~2$K^cZSgCM}Me(FUFB^JxxFzlVh%VG_`KnbHo z68C-?Sf<?jm8bye+}iyi*WiKBUdt=6@q&NfEo7GQqs5WXHRKMkfTn+!{?QM~gBZwF z7ina0Wg?e!V-sqvxr4oy4v=B@X#Yt|`#cZrJ@DW7Wx(GZ)zGREiQSaVjVma!8d;N1 z>69SSsihLP(wc|`-y+SVpgJ!d%y>7|a&>(k6)~#*1&CbzU4+fKK5AUJB2Ey?)f#_# zgNJgEFD`Zx2b*<}s(wfx>Aa%3%a~5i>EgA3%iDP_xTs~LH{)JjjJ`wo5N)-AF-gm= z42PmN&xTKetiZqpdrFWK7HQi!CY<(4E(sXmmvT!qPw#zP6A$5%D7hk_+w?M?@gJCZ z53vb|ZO`h2#2S7{NIG~dw)9d6sXl*|UF8TRrx4GB=Z8=d17jPMyb)zt*~}wxjcaa8 zMJd+QdG)%5g|1c+tM(&v=*k@2VXcO0J(pkEuw;Z+2Mjwbaa@Xq!g)^hrxI<IR;LcD zi3tF4=qz2Voj8gv@+F8uyV@6-yi#y15NPFX7TR`Qi{0cd3Z&v2qF#GYzz%=R;kh<- zYr-y7rYgt?7%mOPA22N&f`>}^hf||4Kc20b?a8%7^8v{HbyY0E+_}*RP5iPkA4y$c zvryyu!~zDK8hmCUwCLMCVwd1VTOleAqjulYH{Z=I`=q2BkePD5AUlPMv&?Av>kJl9 zC>#yoOB*fNp}i+<Yq;d`a+QBe<^qkF690%WD!p_NHXAQ4JE}NFPhj>+?|VSq#QVJ# z!)e#Cti0{rYHrjEABWF&>`RDk=+Z$zW8HY^ZvK8;2KdQjQthWD{j$8?7;Gse{s?w( zvt__?nX->HS^6I)Ci-ZcS1#u0mD=!aceyF@p;4G<sX|u#2F9pwBCvmaSjL=dp>AZQ zcC}RNtjXHWsw`H&vl^>)<G!k_SHG`X3%0H|-;y0|{1ec3_GKpO@Z|gB_tUR5QQsd= zPyhOrChF*i!}lkzkGG#F&*jjTP}XoRLN{2>md7R#9H+6oRLijl-5ezMKQ%#ICIo~; ze?xMGkb6P8V!9xC+%kWI;kHuX!z>T{f`Doo@l@OFI?kCv;6KKwK)hUo>Li|Gz<);o z%T)govKl~<1(iK7d!H@HcB!a^l&ca&U9HY8N}H=c%;Qo3X=LN&8`OFzV8ER5lT9`* zOMxdcRO802lEUB@2fR4KQLMr1+!q8tQ9D-YjH+>A9su1SIB$RAv|##o%b}7YL{Rm@ zbWzE=189V9lnZDXA3Pqw8FJP<Lu_uT>K@LDAhIT=3T@8iW>^sqqs0QSPFQuB>T*$< zfvDX9tKFp{UX%>etYM>vj>a{^aRK6}tDX&u)^n&~$+&1)`Nuo-%X95by({*a9QAlw z?B7X{$x27OeS&{kh<iIbyOW>ZoSfqG)><3TDyf<hq(17y99afAI$w^=#3Ps7yKocK zBz|DxH4ByH7x5iDQPH&fva@i*=;FVx0MBkM^!3DA-j6b^&=}6PL#4fUG;*MJ@YcXv z3f)>=;<i*ZJf<U((3(w&l8$JZ<=uxSy;u{l(bPQ9v|xYgl9jjCK>DOpgOG9cknM?U zt(~*oXSh+M*nwBs9}sgH=RW;gNlY?t@4}PHx~7zMnB~c`nr1v^exv5_$Y(6A@c`ni zc|%K^t>@Khc1_1Mf$sFAU3a?YX-=vO#FZH5rK?$3r4_c#UC`AAe^%@p37mm8Bq>*c zw+i<b?tg#!CYOfuU*?-7{Q$4~Ti<400-GmR?wg=-MPn{R`_U|8Mg?|qz{d48N+YtN z8kSGdrcyOhSKZCd58kHUM^RhqBQQE;43((>5a#ERy9nl_CGERX3Y>8}C+;+UU2SKN zb^OX6=x8$j+MM#L6}jwNa%X5k(l!V{3=jmxk%E7ilThaX2#4AUORQII@@U0@j7bc* zK%xa`08Ng+IFxX8;MQ)CJa|-P*$k}{-O_0j2Bz4u20i-CWL4x7wc<_U^oG4vLGUPe zRK3!uJ9zVzj+IPTarid73Bx~yyU+HYJ>7r$2RKE0$Fj(HeUt3Lz42Z&hK4LZwftUM zyqteHbPUG9EIbGyf*1T4=Vw_F&*)XS{4!c7bEU8LG^IdeNwi$<rWgn;U0x`CoUq2F zTdWX3m-xUyb%3F|{*ysaZYVj+!JuQ>mid}|Mvp@1f;{B_i-o@g{}hw0Q_wH7YBEg2 zmBiyq%DnTKVO;L$F79(J0In5<q7QG6v1fm-01?Dg5bZTKah&HF`@QsFXh7$78GjrU z=M?RYpZ(sr`e}^1ld<!fJLpXZ?oUk{4;uO4(4|IU4MrFP@7FP>#2{i)CmvPushLd= z!KyCoYGheAj<s>El5@np6r4c|cWOA>wDdGHutmHcl6PJC*T_SgUY~1SI9JO(hl77z z7-%uk8gU0Xd}y9-!q-OLwy?G<d*LUKk|MSr<NjVo$$~0lFzZSmJZ%2}m`~wAz;jIq zh95DlQhoBX{^KaWEQaCZ$A7zp-#8?xxX`cXYRy)FaA2XkN9S(zuz*OChEDS&B61P{ zzH5_@M+`2ZRKA?v!KKQFVLZMZ53PSTLePh>R%Wb0USoZqI{hTH{GtSc#AtjxJ;F}( zKses1lsWSd6{_?(WQTOs<E)P?vNN^$gI00O6%~$CrIUe39E827I8TxuJ^Dc@i^@O- zx3-g;Ussv~+9VK;QbR<3i+*<YD{~Vf;8IUST^+Ly0~J7KaJ{fZIJv+_5u$&C4=fS> z3v=4j_H@q`MGUJSK-stGy070RfR8KKH_>8OJqb`H^@Rb66qFzMOMg;`zqJqV4ADFr zl)nHR+WZb7PJ3=>AKt5YL&*4~UW56D7X^jnu5U_JE5Ba&q+{2+2FHX`L9D=$aR@)Y zWiG)#<2=SsuHPF$2!GadWQKpA4M-YZ)E#gWqcD-p;kiH^e4KZ$9wf(Z!CJ%`H&l&I zD^pN{sB!xqxQt(P(PYq~2P5;O8}B+;MFi_OP(^Oq$1383ddlngWP{JjgL4pQ6}P>K zshgDM2@zMB=KmtgXJE(qXhn34&McfFI5zFSn{bPDQ&~5SLX}Mr!3=*585RZAfWvJj zyNY=gv(zv{W_F-w5D}=8HCslPeK-V+2~dBk)^u;v=yG-qRkreUHol6M=b!Q6v3hJU zzRa`Lb<rPu8toDQ2O2zLg3!?71?_WG;JP8r4xt-s#P)l#Ji5=?ON9D+XkH1dJ-eTz zP`ATcdT7To8@ly?rucs?I0p{kQTTA+O5fa^I-L=HhH>)xKt^hwObTRyJIE<=w`a$L zdX-$L`!F?K@6LXOT}NISUqpBsk43q9VvHF^9+k@ap|XE$7+@07VgUth(Uk+Wv~~Sa zxbouNo3X`AJ+TJKBx$*AA-51?Za=3zm&&S~7202B2QmkmOBjC!1sc_?&klOMK^18% zDcpfABB!{AD><NFL`eXZkgmLbCpx42T`5R%)3o$If%^X>Q1ueT=Lr69t@-zg#v}Y@ zOCCx7b|3$oYN;r{+u+W`Qtq?Hw+&0^Vd2{h7}u{6Mv<CInRMdCGlLSSqhMe<@x}DR z>EWy6+4T6QsiJ?6!_L<KgAYY?8Se}5@%i)T;QNKoEJ-g|S_v0XewFMjcwdxC0=t?n zHM#L!vg`x8wFKt{BN1dyJ*0lU`Lw(Li^#L;y^l6z_?v@p*V2cmOL|OG2_R%JUw4e^ zAzxqLJOv~qpj#rNXK2aIW<bzv#)jM@Nw1op{U7`f(=~sVIanyv=Qar4j~IfW03-vn zTHx}o*4Oa}Sv0k*YX7(RH3fCXvWdE>AtdV4`^*&sG>B|t66qusyN%}9m_;!_&LAU$ zs*Pe{D5%pQftXwTi|}VHywkRMMSg|H2<u2y#5&0==~Lg4jRJsD%aMURL1brbr!cgo z2Vj|LDmi~Zr>8_|0YJI}iE8GPJ0wbV*gSgpgpS%9MI%T69??PXqt8*E#zp4{{Zon^ zR%C!;?C=T14yk5sggMm{K2M&zaUzEX0EWk>@RJ(^4B<7MY=NdP#A^Ep3?JClv)Uv4 zU88H<r56+H5)!L=hEQ>=PY?>UPL(iOVcY8zvdMo}#0x7d_y6b}{|hLCb@04a?U38H zU1w#2F)!rXox0m!htg^V;mzr*O8wyH;B=j4*F{p0Af9slTnh`qg&R0a&O1HTEVO=r znKcj68%Q>)zA|fv-&_Y#qbjQ)UrPfqAG4)=wCEmNsut(j^?HMS+dWbW)aLS$RahD~ z&ToI>05J`y+3MxBV>irzQkEkXdbJC}&y(VM5v`>XQRQhzxIKe<5p>HK#4k}2jJ!HX z9nuxct0AQwLf9amQzD`01)-xC=zX1ZjZL=oWfmae<=n(ByZh5ozDf~vhr7F9My$iu z{*1Qvs)Ko8Ykvw`yPOY*8+N&5n8x3kGbVrPKzCA5)<aiqkf>F;VmKEeY*RV_G1dni zdR@CHCbi;Tua;kioNk*JK4vfSIxbNHr04P7o!Y{$CjXrCF*y|=V;jq@uD@C9DrDSA zfv8XKG5tC}WPI_|#m;!=*^c_rkSsx=^8H*Rd0Wf3Sg2-5jmy=-NeN``4d)#LT!w!n zEu~we_=a=Yc|jwS)eZHr-oy)l#lk!G9p@DdF202HEqK(vq8T(1T)QsJ;_T4dCAC@U zZ7t&P!*u!=B@Q1yejL9){^_Uj(YrU3f4=zhhaXPf9KP)!4u1_#UY}0GcQ3=EcW<YM zN7K_UAr9}4Uu-81hwo30-yUx!4kv%=l?}vU`u_08<CE8KUwtic*f`IZ79~1;4vw?D zE$GDUGt5yPk!1=S>_`xN*+pOuT!D2B_y2kG$)nD$(=o3P4vK@rC_AU|ef!(*{#bJc z9Jb>h3SjLccpo$4GCZVY&Z+I`O`IkG<u_1G&@RrQpaB#iztTrFVn)AG2h@LxuQuu; zQMP<TO~fwsrlmr{hzr||0NygXitaMZZWwV9#}O299PM^ZCj5h9QWYFts>``$^mHzT zS2EHq=m}-uC`4=>DP$dgBT5*jLA4+6++Lv1OX_go*O+Igt2eZq0nE*ErF3hM!7gXP zMd#;u^bgmCq)<3)>2fv$e0_i2YROkmDSeb9L|1UeXxDP$yMKh~tiWAYPbcTlaZi*> zx4~4R?ry)VY%`^jMn$W$iL+U{)H;+@6@FGtX4~V+mObO+6maelHEps5Dc@8LqrX}# zlPfjBi}fHpi(t{hd{uiya;S!`|B)0yp|(Wu?Xe`Y>w(G-4(yYx>3Dx3WK6TqDM@*F z&5X185HHU=o{x(fJ7ffB7jXQooJm%UAcJ1*7BOs}aD?8ntC0N(gsj3rH|4Vcu@I!L z0of};-BZXtIYRb5xE^kW&05Z=D2gj?o30YcT`Wq#GGE2jivze`rB}fJfXQ?&#~Z<h z_t_SqK8pv>G{_AJNzi|qD1s97?qcTFrO;JV!_V1bUht~oF%0p1ctTMaEpDSV5`?B5 zogWQ15`9P*ryax{kF>CA+fuT;A|c5~eDc@`$?m!W?d^bYRG4^2Rwr_ZM3U>{&8QPc zE)F3*M)5%z<eVzu72?IZPo>(;n354lyQTrEb(*6hW6F<GbrOG*3j_zeNy412KZ0^# zPQ^M~qo+W2al16I9G_uzE7`~|O&RDR9hm}kS2=^kHDk@@_+OQHe7%5!daKip{{r_; z%&m?I$N1WRbgHph;=ARAc5YHBoB&JxM_iFM{8HchdO6Gq)R2GzlwTu_xoUv-n)L_F zIo?EozGfEiHc5ZBoK|P8L)M`&e){9~S*_!Vm)Dwwmr<?+N>W+rFE8Cxt<x#h&9^mz z4)yQ!a#7=%rGW(<T5_mlovXZO=si3tm`NQ9#=<<ve}W(}-MP1MNd;_<AxDp~Kd5X9 z!iD8FYDzVOgy;q*4dr&qD#S$w^(#>=$h~Xf<hxFXbz6Vuwds@1mv>4J{V|De&5=@c zbRp;l<G>^vX6Zg87k)e1-5KpX3-|W+cb<kHrbqTOaK>KuL&HT1N@peh_PZB+3y7eg z#zVB5D?^cvBF_OTs8ooRvMi>m8SIB19|vX<&a(L${)Lym3;qRAO9KQ7000000PJi< zNdN!<006U9GIoavmv}`<-isKAM3dCHHUj>5lYzV!lOwt$2|+Rd07GwNWiOLaz8aJ7 zybhCix*7q1lasnv0m_r>x>*ArYXFlxYaNqhyFdX%lcl>|1F(Srlg@!0lLWgblSsT7 z0|SHrlOco{lYG2D0fCdfyjlSVlNh~U1HXm<lih|Llb5|f0Y;P9y<G!Pl>n1&l^c^& Mz9t4?xc~qF0BX*C?f?J) -- GitLab