ยปCore Development>Code coverage>Mac/Modules/ae/aesupport.py

Python code coverage for Mac/Modules/ae/aesupport.py

#countcontent
1n/a# This script will generate the AppleEvents interface for Python.
2n/a# It uses the "bgen" package to generate C code.
3n/a# It execs the file aegen.py which contain the function definitions
4n/a# (aegen.py was generated by aescan.py, scanning the <AppleEvents.h> header file).
5n/a
6n/a
7n/afrom macsupport import *
8n/a
9n/a
10n/aAEArrayType = Type("AEArrayType", "c")
11n/aAESendMode = Type("AESendMode", "l")
12n/aAESendPriority = Type("AESendPriority", "h")
13n/aAEInteractAllowed = Type("AEInteractAllowed", "b")
14n/aAEReturnID = Type("AEReturnID", "h")
15n/aAETransactionID = Type("AETransactionID", "l")
16n/a
17n/a
18n/a
19n/aAEEventClass = OSTypeType('AEEventClass')
20n/aAEEventID = OSTypeType('AEEventID')
21n/aAEKeyword = OSTypeType('AEKeyword')
22n/aDescType = OSTypeType('DescType')
23n/a
24n/a
25n/aAEDesc = OpaqueType('AEDesc')
26n/aAEDesc_ptr = OpaqueType('AEDesc')
27n/a
28n/aAEAddressDesc = OpaqueType('AEAddressDesc', 'AEDesc')
29n/aAEAddressDesc_ptr = OpaqueType('AEAddressDesc', 'AEDesc')
30n/a
31n/aAEDescList = OpaqueType('AEDescList', 'AEDesc')
32n/aAEDescList_ptr = OpaqueType('AEDescList', 'AEDesc')
33n/a
34n/aAERecord = OpaqueType('AERecord', 'AEDesc')
35n/aAERecord_ptr = OpaqueType('AERecord', 'AEDesc')
36n/a
37n/aAppleEvent = OpaqueType('AppleEvent', 'AEDesc')
38n/aAppleEvent_ptr = OpaqueType('AppleEvent', 'AEDesc')
39n/a
40n/a
41n/aclass EHType(Type):
42n/a def __init__(self, name = 'EventHandler', format = ''):
43n/a Type.__init__(self, name, format)
44n/a def declare(self, name):
45n/a Output("AEEventHandlerUPP %s__proc__ = upp_GenericEventHandler;", name)
46n/a Output("PyObject *%s;", name)
47n/a def getargsFormat(self):
48n/a return "O"
49n/a def getargsArgs(self, name):
50n/a return "&%s" % name
51n/a def passInput(self, name):
52n/a return "%s__proc__, (long)%s" % (name, name)
53n/a def passOutput(self, name):
54n/a return "&%s__proc__, (long *)&%s" % (name, name)
55n/a def mkvalueFormat(self):
56n/a return "O"
57n/a def mkvalueArgs(self, name):
58n/a return name
59n/a def cleanup(self, name):
60n/a Output("Py_INCREF(%s); /* XXX leak, but needed */", name)
61n/a
62n/aclass EHNoRefConType(EHType):
63n/a def passInput(self, name):
64n/a return "upp_GenericEventHandler"
65n/a
66n/aEventHandler = EHType()
67n/aEventHandlerNoRefCon = EHNoRefConType()
68n/a
69n/a
70n/aIdleProcPtr = FakeType("upp_AEIdleProc")
71n/aAEIdleUPP = IdleProcPtr
72n/aEventFilterProcPtr = FakeType("(AEFilterUPP)0")
73n/aAEFilterUPP = EventFilterProcPtr
74n/aNMRecPtr = FakeType("(NMRecPtr)0")
75n/aEventHandlerProcPtr = FakeType("upp_GenericEventHandler")
76n/aAEEventHandlerUPP = EventHandlerProcPtr
77n/aAlwaysFalse = FakeType("0")
78n/a
79n/a
80n/aAEFunction = OSErrWeakLinkFunctionGenerator
81n/aAEMethod = OSErrWeakLinkMethodGenerator
82n/a
83n/a
84n/aincludestuff = includestuff + """
85n/a#include <Carbon/Carbon.h>
86n/a
87n/a#ifdef USE_TOOLBOX_OBJECT_GLUE
88n/aextern PyObject *_AEDesc_New(AEDesc *);
89n/aextern int _AEDesc_Convert(PyObject *, AEDesc *);
90n/a
91n/a#define AEDesc_New _AEDesc_New
92n/a#define AEDesc_NewBorrowed _AEDesc_NewBorrowed
93n/a#define AEDesc_Convert _AEDesc_Convert
94n/a#endif
95n/a
96n/atypedef long refcontype;
97n/a
98n/astatic pascal OSErr GenericEventHandler(const AppleEvent *request, AppleEvent *reply, refcontype refcon); /* Forward */
99n/a
100n/aAEEventHandlerUPP upp_GenericEventHandler;
101n/a
102n/astatic pascal Boolean AEIdleProc(EventRecord *theEvent, long *sleepTime, RgnHandle *mouseRgn)
103n/a{
104n/a if ( PyOS_InterruptOccurred() )
105n/a return 1;
106n/a return 0;
107n/a}
108n/a
109n/aAEIdleUPP upp_AEIdleProc;
110n/a"""
111n/a
112n/afinalstuff = finalstuff + """
113n/astatic pascal OSErr
114n/aGenericEventHandler(const AppleEvent *request, AppleEvent *reply, refcontype refcon)
115n/a{
116n/a PyObject *handler = (PyObject *)refcon;
117n/a AEDescObject *requestObject, *replyObject;
118n/a PyObject *args, *res;
119n/a if ((requestObject = (AEDescObject *)AEDesc_New((AppleEvent *)request)) == NULL) {
120n/a return -1;
121n/a }
122n/a if ((replyObject = (AEDescObject *)AEDesc_New(reply)) == NULL) {
123n/a Py_DECREF(requestObject);
124n/a return -1;
125n/a }
126n/a if ((args = Py_BuildValue("OO", requestObject, replyObject)) == NULL) {
127n/a Py_DECREF(requestObject);
128n/a Py_DECREF(replyObject);
129n/a return -1;
130n/a }
131n/a res = PyEval_CallObject(handler, args);
132n/a requestObject->ob_itself.descriptorType = 'null';
133n/a requestObject->ob_itself.dataHandle = NULL;
134n/a replyObject->ob_itself.descriptorType = 'null';
135n/a replyObject->ob_itself.dataHandle = NULL;
136n/a Py_DECREF(args);
137n/a if (res == NULL) {
138n/a PySys_WriteStderr("Exception in AE event handler function\\n");
139n/a PyErr_Print();
140n/a return -1;
141n/a }
142n/a Py_DECREF(res);
143n/a return noErr;
144n/a}
145n/a
146n/aPyObject *AEDesc_NewBorrowed(AEDesc *itself)
147n/a{
148n/a PyObject *it;
149n/a
150n/a it = AEDesc_New(itself);
151n/a if (it)
152n/a ((AEDescObject *)it)->ob_owned = 0;
153n/a return (PyObject *)it;
154n/a}
155n/a
156n/a"""
157n/a
158n/ainitstuff = initstuff + """
159n/a upp_AEIdleProc = NewAEIdleUPP(AEIdleProc);
160n/a upp_GenericEventHandler = NewAEEventHandlerUPP(GenericEventHandler);
161n/a PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc *, AEDesc_New);
162n/a PyMac_INIT_TOOLBOX_OBJECT_NEW(AEDesc *, AEDesc_NewBorrowed);
163n/a PyMac_INIT_TOOLBOX_OBJECT_CONVERT(AEDesc, AEDesc_Convert);
164n/a"""
165n/a
166n/amodule = MacModule('_AE', 'AE', includestuff, finalstuff, initstuff)
167n/a
168n/aclass AEDescDefinition(PEP253Mixin, GlobalObjectDefinition):
169n/a getsetlist = [(
170n/a 'type',
171n/a 'return PyMac_BuildOSType(self->ob_itself.descriptorType);',
172n/a None,
173n/a 'Type of this AEDesc'
174n/a ), (
175n/a 'data',
176n/a """
177n/a PyObject *res;
178n/a Size size;
179n/a char *ptr;
180n/a OSErr err;
181n/a
182n/a size = AEGetDescDataSize(&self->ob_itself);
183n/a if ( (res = PyString_FromStringAndSize(NULL, size)) == NULL )
184n/a return NULL;
185n/a if ( (ptr = PyString_AsString(res)) == NULL )
186n/a return NULL;
187n/a if ( (err=AEGetDescData(&self->ob_itself, ptr, size)) < 0 )
188n/a return PyMac_Error(err);
189n/a return res;
190n/a """,
191n/a None,
192n/a 'The raw data in this AEDesc'
193n/a )]
194n/a
195n/a def __init__(self, name, prefix = None, itselftype = None):
196n/a GlobalObjectDefinition.__init__(self, name, prefix or name, itselftype or name)
197n/a self.argref = "*"
198n/a
199n/a def outputStructMembers(self):
200n/a GlobalObjectDefinition.outputStructMembers(self)
201n/a Output("int ob_owned;")
202n/a
203n/a def outputInitStructMembers(self):
204n/a GlobalObjectDefinition.outputInitStructMembers(self)
205n/a Output("it->ob_owned = 1;")
206n/a
207n/a def outputCleanupStructMembers(self):
208n/a Output("if (self->ob_owned) AEDisposeDesc(&self->ob_itself);")
209n/a
210n/aaedescobject = AEDescDefinition('AEDesc')
211n/amodule.addobject(aedescobject)
212n/a
213n/afunctions = []
214n/aaedescmethods = []
215n/a
216n/aexecfile('aegen.py')
217n/a##execfile('aedatamodelgen.py')
218n/a
219n/a# Manual generator
220n/aAutoDispose_body = """
221n/aint onoff, old;
222n/aif (!PyArg_ParseTuple(_args, "i", &onoff))
223n/a return NULL;
224n/aold = _self->ob_owned;
225n/a_self->ob_owned = onoff;
226n/a_res = Py_BuildValue("i", old);
227n/areturn _res;
228n/a"""
229n/af = ManualGenerator("AutoDispose", AutoDispose_body)
230n/af.docstring = lambda: "(int)->int. Automatically AEDisposeDesc the object on Python object cleanup"
231n/aaedescmethods.append(f)
232n/a
233n/afor f in functions: module.add(f)
234n/afor f in aedescmethods: aedescobject.add(f)
235n/a
236n/aSetOutputFileName('_AEmodule.c')
237n/amodule.generate()