fixed xmlHasNsProp() bugs for defaulted from DTD attribs, added a specific

* tree.c python/tests/Makefile.am python/tests/attribs.py:
  fixed xmlHasNsProp() bugs for defaulted from DTD attribs,
  added a specific regression test
* python/generator.py: xmlHasNsProp() and xmlHasProp() shall
  not raise exceptions when failing to find the attribute.
Daniel
diff --git a/python/generator.py b/python/generator.py
index dbfc5f7..e4618d1 100755
--- a/python/generator.py
+++ b/python/generator.py
@@ -551,6 +551,11 @@
     "URI": "xmlFreeURI",
 }
 
+functions_noexcept = {
+    "xmlHasProp": 1,
+    "xmlHasNsProp": 1,
+}
+
 function_classes = {}
 
 function_classes["None"] = []
@@ -675,6 +680,7 @@
     global primary_classes
     global classes_ancestor
     global classes_destructors
+    global functions_noexcept
 
     for type in classes_type.keys():
 	function_classes[classes_type[type][2]] = []
@@ -799,7 +805,9 @@
 		    #
 		    # Raise an exception
 		    #
-		    if string.find(name, "URI") >= 0:
+		    if functions_noexcept.has_key(name):
+		        classes.write("    if ret == None:return None\n");
+		    elif string.find(name, "URI") >= 0:
 			classes.write(
 			"    if ret == None:raise uriError('%s() failed')\n"
 			              % (name))
@@ -912,7 +920,10 @@
 			#
 			# Raise an exception
 			#
-			if string.find(name, "URI") >= 0:
+			if functions_noexcept.has_key(name):
+			    classes.write(
+			        "        if ret == None:return None\n");
+			elif string.find(name, "URI") >= 0:
 			    classes.write(
 		    "        if ret == None:raise uriError('%s() failed')\n"
 					  % (name))
@@ -935,7 +946,10 @@
 			#
 			# Raise an exception
 			#
-			if string.find(name, "URI") >= 0:
+			if functions_noexcept.has_key(name):
+			    classes.write(
+			        "        if ret == None:return None");
+			elif string.find(name, "URI") >= 0:
 			    classes.write(
 		    "        if ret == None:raise uriError('%s() failed')\n"
 					  % (name))