[x3d-public] Next, in Python news...

Brutzman, Donald (Don) (CIV) brutzman at nps.edu
Sat Aug 21 21:57:38 PDT 2021


Hi John, am trying to follow your message.

We have pylint but recent upgrade to python caused a gap, not resolved yet.

Meanwhile python evaluates everything building the scene graph quite strictly, primarily through setters when creating values.  I'm not sure it is possible to create invalid XML, VRML or JSON from x3d.py package.  If such a case is found, let's fix the bug it indicates.

If you have an example python program/snippet that does _not_ produce valid XML, VRML or JSON, please advise.

v/r Don


-----Original Message-----
From: x3d-public <x3d-public-bounces at web3d.org> On Behalf Of John Carlson
Sent: Saturday, August 21, 2021 3:10 AM
To: X3D Graphics public mailing list <x3d-public at web3d.org>
Subject: [x3d-public] Next, in Python news...

I've been converting JSON schema to pure python validators (no separate JSON schema file required) with a python package (not mine).  If I could convert X3DUOM to Python and get a free XML, VRML, and JSON schema validation in Python, that would WOW me. BTW, I see that you don't use an XML parser in Python yet?  May I recommend the popular ElementTree built-in package.  Here's a simple pattern (in python):

import xml.etree.ElementTree
soup =
xml.etree.ElementTree.parse(open("../../specifications/X3dUnifiedObjectModel-4.0.xml")).getroot()

So, Don should look at pylint output in the logs, perhaps? Me too!  I just found out about pylint!  I can find bugs in Python while Don works on Python-creating XSLT?   That would seem a better division of labor. I just ran ```ant pylint```.  I can do that and search for bugs in x3d.py.  I see that my changes are 1.53/10 worse, so I'm backing the changes that I made to X3duomToX3dPythonPackage.xslt. Please revisit this email, or look at code I pasted below.  The problem is around isinstance.  I could be misunderstanding duck typing.  To me, 2 ProtoBody's inside the isinstance parameters spells trouble, but I'm unsure of a fix at this point.  I have a backup of my changes should we need to recover.  Perhaps a step forward is better than a step backwards?

     @ProtoBody.setter
     def ProtoBody(self, ProtoBody):
         if  ProtoBody is None:
             ProtoBody = None # default
         assertValidSFNode(ProtoBody)
         if not ProtoBody is None and not
isinstance(ProtoBody,(ProtoBody,ProtoInstance)):
             # print(flush=True)
             raise X3DTypeError(str(ProtoBody) + ' does not match required node type (ProtoBody,ProtoInstance) and is invalid')
         self.__ProtoBody = ProtoBody


_______________________________________________
x3d-public mailing list
x3d-public at web3d.org
http://web3d.org/mailman/listinfo/x3d-public_web3d.org



More information about the x3d-public mailing list