The transition to NetApp MS Azure AD B2C is complete. If you missed the pre-registration, you will be invited to reigister at next log in.
Please note that access to your NetApp data may take up to 1 hour.
To learn more, read the FAQ and watch the video.
Need assistance? Complete this form and select “Registration Issue” as the Feedback Category.

Software Development Kit (SDK) and API Discussions

sprintf() NaElement method not working in Python NMSDK 5.4P1

gasparuben

hello,

 

I am working with python libs of MNSDK 5.4P1. I realised that NaElement sptrinf() method is not working. I am buiding this class:

 

def GetInfoPath(self):
		'''It's supposed to just retrieved one volume.'''

		netappops.logger.debug("GetInfoPath: Begin")
		s=self.__CreateServer(self.serverpath)
			
		tag=None
		while True:
			#build query
			api1 = NaElement("volume-get-iter")
			if tag is not None: 
				api1.child_add_string("tag",tag);
			api1.child_add_string("max-records",10);
			query = NaElement("query")
			
			
			volpath_parent = NaElement("volume-attributes")
			volpath = NaElement("volume-id-attributes")
			volpath.child_add_string("junction-path",self.serverlayout)
			self.volume["junction-path"]=self.serverlayout

			query.child_add(volpath_parent)
			volpath_parent.child_add(volpath)		
			api1.child_add(query)
			#print(api1.sprintf())		
			#Get attributes we want
			desiredAttrs = NaElement("desired-attributes")
			desiredAutoSpace = NaElement("volume-autosize-attributes")
			desiredIdAttr = NaElement("volume-id-attributes")
			desiredSpace = NaElement("volume-space-attributes")
			desiredState = NaElement("volume-state-attributes")
			desiredAttrs.child_add(desiredAutoSpace)
			desiredAttrs.child_add(desiredIdAttr)
			desiredAttrs.child_add(desiredSpace)
			desiredAttrs.child_add(desiredState)
			api1.child_add(desiredAttrs)
			
			netappops.logger.debug("query looks like: %s",api1.sprintf())

 

 

This always fails with this error:

 

 

Traceback (most recent call last):
File "netappops.py", line 194, in <module>
a.GetInfoPath()
File "netappops.py", line 126, in GetInfoPath
print(api1.sprintf())
File "/ORA/dbs01/work/storage-api/lib/python/NetApp/NaElement.py", line 236, in sprintf
s = s+c.sprintf(indent + "\t")
File "/ORA/dbs01/work/storage-api/lib/python/NetApp/NaElement.py", line 238, in sprintf
self.element['content'] = NaElement.escapeHTML(self.element['content'])
File "/ORA/dbs01/work/storage-api/lib/python/NetApp/NaElement.py", line 342, in escapeHTML
cont = re.sub(r'&','&amp;',cont,count=0)
File "/ORA/dbs01/work/storage-api/v1/lib64/python3.4/re.py", line 179, in sub
return _compile(pattern, flags).sub(repl, string, count)

 

I have modified the file: /ORA/dbs01/work/storage-api/lib/python/NetApp/NaElement.py  appending the lines in bald:

 

  @staticmethod

    def escapeHTML(cont):
        """ This is a private function, not to be called externally.
        This method converts reserved HTML characters to corresponding entity names.
        """
        #APPEND BEGIN
        if not isinstance(cont,str):
                cont = str(cont)
        #APPEND END
        cont = re.sub(r'&','&amp;',cont,count=0)
        cont = re.sub(r'<','&lt;',cont,count=0)
        cont = re.sub(r'>','&gt;',cont,count=0)
        cont = re.sub(r"'",'&apos;',cont,count=0)
        cont = re.sub(r'"','&quot;',cont,count=0)

        """ The existence of '&' (ampersand) sign in entity names implies that multiple calls
        to this function will result in non-idempotent encoding. So, to handle such situation
        or when the input itself contains entity names, we reconvert such recurrences to
        appropriate characters.
        """
        cont = re.sub(r'&amp;amp;','&amp;',cont,count=0)
        cont = re.sub(r'&amp;lt;','&lt;',cont,count=0)
        cont = re.sub(r'&amp;gt;','&gt;',cont,count=0)
        cont = re.sub(r'&amp;apos;','&apos;',cont,count=0)
        cont = re.sub(r'&amp;quot;','&quot;',cont,count=0)
        return cont

 

Now it looks working:

 

storage-api-console DEBUG    MainProcess query looks like: <volume-get-iter>
        <max-records>10</max-records>
        <query>
                <volume-attributes>
                        <volume-id-attributes>
                                <junction-path>/ORA/dbs07/DNFS</junction-path>
                        </volume-id-attributes>
                </volume-attributes>
        </query>
        <desired-attributes>
                <volume-autosize-attributes></volume-autosize-attributes>
                <volume-id-attributes></volume-id-attributes>
                <volume-space-attributes></volume-space-attributes>
                <volume-state-attributes></volume-state-attributes>
        </desired-attributes>
</volume-get-iter>

 

Please could you verify the solution and solve the problem for next release of the NMSDK.

 

THank you,

RUben

0 REPLIES 0
Announcements
NetApp on Discord Image

We're on Discord, are you?

Live Chat, Watch Parties, and More!

Explore Banner

Meet Explore, NetApp’s digital sales platform

Engage digitally throughout the sales process, from product discovery to configuration, and handle all your post-purchase needs.

NetApp Insights to Action
I2A Banner
Public