Hello Dave,

Thank you for the quick answer.

Regarding (2), here are the xsd files: https://www.dropbox.com/s/x5kljbv3gjsem1h/energistics.zip?dl=0 , and the file that didn't work is 'prodml/v2.0/xsd_schemas/DasAcquisition.xsd' in the archive.

One more issue I've found is that in documentation it is written that default parameter for export is --export="write literal" but in reality it is --export="write".

Regards,
Eugene

On 02.05.2017 01:45, Dave Kuhlman wrote:
Eugene,

Hello.  I'm glad generateDS.py has been helpful.  Thanks for letting
me know.

Here are a few comments:

1. The file gends_user_methods.py is in the source distribution.
    You can find that here:
    https://dkuhl...@bitbucket.org/dkuhlman/generateds

    The documentation is wrong on that.  I'll fix it.

2. With respect to on-file-per-xsd -- In the test directory
    (generateds/tests/ again in the source distribution) there is a
    test that uses that option.  Perhaps you can look at that for
    clues.  The files of interest are:

        generateds/tests/oneper00.xsd
        generateds/tests/oneper02.xsd
        generateds/tests/oneper01.xsd
        generateds/tests/oneper03.xsd

    The unit test when run, generates output modules in subdirectory
    tests/OnePer.

    The command used to run that test is in tests/test.py in method
    test_022_one_per.  Here is that command:

         def test_022_one_per(self):
             cmdTempl = (
                 'python generateDS.py --no-dates --no-versions '
                 '--silence --member-specs=list -f '
                 '--one-file-per-xsd 
--output-directory="tests/Ot_022_one_perePer" '
                 '--module-suffix="One" '
                 '--super=%s2_sup '
                 'tests/%s00.xsd'
             )
             t_ = 'oneper'
             cmd = cmdTempl % (t_, t_, )
             o
             o
             o

    More specifically, about the maxLoops message, that error means
    that you have an element definition that extends another element
    definition, but generateDS.py thinks it should not generate the
    class for the extension because it has not yet generated the
    class for the base/parent.  I've had to work on this once before.
    But, I don't know why that error is happening in your case.

    Do you have a schema that produces this error and that you could
    send me.  If you do, I take a look.

3. With respect to the namespace definition behavior and the
    repeated namespace definitions -- I'll take a look to see how
    this can be done.

6. About parsing from a file-like object -- Actually, if I
    understand you correctly, this already works.  You can pass a
    file object that is open for reading to the generated parse
    functions.  The parameter name is misleading, I suppose.  But,
    lxml.etree.parse does accept either a string file name or a file
    object.

More tomorrow when I have a bit more time.

Thanks for the detailed report.

Dave


On Mon, May 01, 2017 at 11:18:00AM +0300, Eugene Petkevich wrote:
Hello,

Thank you for the GenerateDS library.  I find it very useful.  I have a
couple of things to ask:

1) The webpage with example python code, mentioned in the documentation --
http://www.davekuhlman.org/gends_user_methods.py  -- does not exist.

2) When I try to use --one-file-per-xsd argument, I get the following error:
*** maxLoops exceeded.  Something is wrong with --one-file-per-xsd.

3) Namespace definition behavior -- by default, generateDS puts namespace
definition in every export method of generated classes. That is, every
element in an exported xml that has children would have namespace
definition.  But what if I only want namespace definition in top-level
element?  For example, I want this:

<ns1:topLevel xmlns:ns1="http://somenamespace.org";>
   <ns1:secondLevel>
     <ns1:thirdLevel>
   </ns1:secondLevel>
</ns1:topLevel>

Instead of this:

<ns1:topLevel xmlns:ns1="http://somenamespace.org";>
   <ns1:secondLevel xmlns:ns1="http://somenamespace.org";>
     <ns1:thirdLevel xmlns:ns1="http://somenamespace.org";>
   </ns1:secondLevel>
</ns1:topLevel>

I know I can modify export methods and put namespacedef_='' in each of them
except for the top-level.  But is there any other way to optimize that?  Do
you think it makes sense to add such feature via a command-line option?  I
looked into code and it changed to this by modifying just one like, but
didn't test it thoroughly.

4) Several namespaces do not work.

When there are several namespaces, only one is filled everywhere in
generated classes.  Therefore it builds the following xml

<ns1:topLevel xmlns:ns1="http://somenamespace.org";
xmlns:ns2="http://someothernamespace.org";>
   <ns1:secondLevel>
     <ns1:thirdLevel>
   </ns1:secondLevel>
</ns1:topLevel>

Instead of what it should be:

<ns1:topLevel xmlns:ns1="http://somenamespace.org";
xmlns:ns2="http://someothernamespace.org";>
   <ns2:secondLevel>
     <ns1:thirdLevel>
   </ns2:secondLevel>
</ns1:topLevel>

5) XML schema extension elements.

I'm not sure how it should be used, but it seems that extension does not
work correctly.  In types which are not leaves (that do are not
extended/subclassed) I see the /extensiontype_ /field, though it is not
initialized with a name of the subclass, and in leaves it is absent overall.
Or should it be the desired behaviour? It seems logical to assign type name
to the /extensiontype_/, then it produces correct xml, at least in my case.

6) A nice feature would be if we can parse xml from file-like object, not
only filename (just like it is exported to the file-like object). Do you
think the feature is worth adding?

In case it makes sense to work on these things, I'll be glad to contribute.

Best regards,
Eugene


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
generateds-users mailing list
generateds-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/generateds-users

Reply via email to