Just a follow up to my last message:

Looking via bitbucket I think, that we are talking about this change:

+Version 2.30.4 (11/06/2018)
+- A fix from François Guimond for passing namespaceprefix_ to
+  ``self.exportChildren``.  Thanks François.

https://bitbucket.org/dkuhlman/generateds/commits/f75d7ec327a5e9d839cbb73e7995c30461850e72#chg-generateDS.py

which introduced the passing of namespaceprefix_ to childen.

As I showed below, this results in printing the namespace in every xml tag
which is hard to read and in my opinion unnecessary.

So I would vote for the old version, only keeping the namespace in the top 
element.

Another possibility would be a check if there are default namespaces for
different elements.

Regards,
Bernd


-----Ursprüngliche Nachricht-----
Von: Zimmermann, Bernd 
Gesendet: Montag, 10. Dezember 2018 10:39
An: 'Dave Kuhlman' <dkuhl...@davekuhlman.org>; generateds-users 
<generateds-users@lists.sourceforge.net>
Betreff: New export bug in 2.30.8 ?

Hello,

just updated from 2.29.24 to 2.30.8 and discovered a maybe bug in the export 
function.

2.29.24
was: def export(self, outfile, level, namespaceprefix_='', name_='Target', 
namespacedef_='', pretty_print=True):

2.30.8
is: def export(self, outfile, level, namespaceprefix_='', namespacedef_='', 
name_='Target', pretty_print=True):

well Ok, change of the parameter order, but there must be something wrong:

test code:

        requestID = Natparas2.RequestID('DE','045','1234567')
        dt = datetime.datetime.now().replace(microsecond=0)
        localtime = dt.astimezone(pytz.timezone("Europe/Berlin"))
        timestamp = str(localtime).replace(" 
","").replace("-","").replace(":","")
        cSPID = '49045'
        retainedDataHeader = Natparas2.RetainedDataHeader(requestID, cSPID, 
timestamp)
        requestAcknowledgement = Natparas2.RequestAcknowledgement()
        retainedDataPayload = Natparas2.RetainedDataPayload(None, 
requestAcknowledgement)
        testxml = 
Natparas2.RetainedDataMessage('0.4.0.2.3.0.14',retainedDataHeader, 
retainedDataPayload)
        
        output = StringIO()
        output.write('<?xml version="1.0" encoding="UTF-8"?>\n')
        testxml.export(output, 0, '', 'retainedDataMessage')


From 2.29.24:
<?xml version="1.0" encoding="UTF-8"?>
<retainedDataMessage xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";>
    <rdHeaderId>0.4.0.2.3.0.14</rdHeaderId>
    <retainedDataHeader>
        <requestID>
            <countryCode>DE</countryCode>
            <authorisedOrganisationID>045</authorisedOrganisationID>
            <requestNumber>1234567</requestNumber>
        </requestID>
        <cSPID>49045</cSPID>
        <timeStamp>20181210101011+0100</timeStamp>
    </retainedDataHeader>
    <retainedDataPayload>
        <requestAcknowledgement/>
    </retainedDataPayload>
</retainedDataMessage>

as it sould be.
Note: using default ns for RetainedDataMessage:

GenerateDSNamespaceDefs = {
    "RetainedDataMessage": 
'xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";',
}

defined only for the xml tag < RetainedDataMessage> and as the output shows, it 
is only printed in line 2 of the output.
All other xml tags are without NS.

From 2.30.8:
<?xml version="1.0" encoding="UTF-8"?>
<RetainedDataMessage xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";>
    <rdHeaderId>0.4.0.2.3.0.14</rdHeaderId>
    <retainedDataHeader xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";>
        <requestID xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";>
            <countryCode>DE</countryCode>
            <authorisedOrganisationID>045</authorisedOrganisationID>
            <requestNumber>1234567</requestNumber>
        </requestID>
        <cSPID>49045</cSPID>
        <timeStamp>20181210102515+0100</timeStamp>
    </retainedDataHeader>
    <retainedDataPayload 
xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData";>
        <requestAcknowledgement 
xmlns="http://uri.etsi.org/02657/v1.18.1#/RetainedData"/>
    </retainedDataPayload>
</RetainedDataMessage>

Difference:

ALL other xml tags get the defaultNS which is wrong here, because only 
<RetainedDataMessage> shall have it.
All other xml tags should go without defaultNS.

Code compare shows:

in 2.29.24:
self.exportChildren(outfile, level + 1, namespaceprefix_='', name_='Target', 
pretty_print=pretty_print)

in 2.30.8:
self.exportChildren(outfile, level + 1, namespaceprefix_, namespacedef_, 
name_='Target', pretty_print=pretty_print)

here the namespacedef_ is added, but if the children is another xml tag with 
another name like <retainedDataHeader>, and the defaultNS ist wrong here 
because it is not valid and only valid for <RetainedDataMessage>.
So it must be checked in advance if it is valid here or not and if is defined 
for the given tag name.

Please fix it 😉
Perhaps either roll back to the old behaviour or please implement a name check 
in the children print function to check if the children xml tag name hat got a 
defaultNS defined for its tag name.

Regards,
Bernd


_______________________________________________
generateds-users mailing list
generateds-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/generateds-users

Reply via email to