[Python-checkins] python/dist/src/Mac/Modules/cf cfsupport.py,1.16,1.17

jackjansen@sourceforge.net jackjansen@sourceforge.net
2002年5月12日 15:04:16 -0700


Update of /cvsroot/python/python/dist/src/Mac/Modules/cf
In directory usw-pr-cvs1:/tmp/cvs-serv3036/Python/Mac/Modules/cf
Modified Files:
	cfsupport.py 
Log Message:
- Better exception when a NULL CF object is encountered.
- Manually generate a routine with funny error semantics.
Index: cfsupport.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Mac/Modules/cf/cfsupport.py,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** cfsupport.py	10 May 2002 22:51:58 -0000	1.16
--- cfsupport.py	12 May 2002 22:04:14 -0000	1.17
***************
*** 204,208 ****
 class MyGlobalObjectDefinition(GlobalObjectDefinition):
 	def outputCheckNewArg(self):
! 		Output("if (itself == NULL) return PyMac_Error(resNotFound);")
 	def outputStructMembers(self):
 		GlobalObjectDefinition.outputStructMembers(self)
--- 204,212 ----
 class MyGlobalObjectDefinition(GlobalObjectDefinition):
 	def outputCheckNewArg(self):
! 		Output('if (itself == NULL)')
! 		OutLbrace()
! 		Output('PyErr_SetString(PyExc_RuntimeError, "cannot wrap NULL");')
! 		Output('return NULL;')
! 		OutRbrace()
 	def outputStructMembers(self):
 		GlobalObjectDefinition.outputStructMembers(self)
***************
*** 502,509 ****
 CFStringRef_object.add(f)
 
- toPython_body = """
- return PyCF_CF2Python(_self->ob_itself);
- """
- 
 # Get data from CFDataRef
 getasdata_body = """
--- 506,509 ----
***************
*** 519,523 ****
--- 519,552 ----
 CFDataRef_object.add(f)
 
+ # Manual generator for CFPropertyListCreateFromXMLData because of funny error return
+ fromxml_body = """
+ CFTypeRef _rv;
+ CFOptionFlags mutabilityOption;
+ CFStringRef errorString;
+ if (!PyArg_ParseTuple(_args, "l",
+ &mutabilityOption))
+ 	return NULL;
+ _rv = CFPropertyListCreateFromXMLData((CFAllocatorRef)NULL,
+ _self->ob_itself,
+ mutabilityOption,
+ &errorString);
+ if (errorString)
+ 	CFRelease(errorString);
+ if (_rv == NULL) {
+ 	PyErr_SetString(PyExc_RuntimeError, "Parse error in XML data");
+ 	return NULL;
+ }
+ _res = Py_BuildValue("O&",
+ CFTypeRefObj_New, _rv);
+ return _res;
+ """
+ f = ManualGenerator("CFPropertyListCreateFromXMLData", fromxml_body)
+ f.docstring = lambda: "(CFOptionFlags mutabilityOption) -> (CFTypeRefObj)"
+ CFTypeRef_object.add(f)
 
+ # Convert CF objects to Python objects
+ toPython_body = """
+ return PyCF_CF2Python(_self->ob_itself);
+ """
 
 f = ManualGenerator("toPython", toPython_body);

AltStyle によって変換されたページ (->オリジナル) /