diff options
author | Michael Howitz <mh@gocept.com> | 2023-04-20 08:17:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-20 08:17:17 +0200 |
commit | 869deee11838b8617998969d98e65b0f868c8629 (patch) | |
tree | 50542419cd8150f8740bfeffff4443ec8120469b /include | |
parent | 7c9340441401198b3eae0b76517afde6ff1d1719 (diff) | |
download | zope-security-869deee11838b8617998969d98e65b0f868c8629.tar.gz |
Drop using `setup_requires`. (#98)
* Drop using ``setup_requires`` due to constant problems on GHA.
* Add preliminary support for Python 3.12a7
Diffstat (limited to 'include')
-rw-r--r-- | include/zope.proxy/zope/proxy/proxy.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/include/zope.proxy/zope/proxy/proxy.h b/include/zope.proxy/zope/proxy/proxy.h new file mode 100644 index 0000000..10e5b5b --- /dev/null +++ b/include/zope.proxy/zope/proxy/proxy.h @@ -0,0 +1,53 @@ +#ifndef _proxy_H_ +#define _proxy_H_ 1 + +typedef struct { + PyObject_HEAD + PyObject *proxy_object; +} ProxyObject; + +#define Proxy_GET_OBJECT(ob) (((ProxyObject *)(ob))->proxy_object) + +typedef struct { + PyTypeObject *proxytype; + int (*check)(PyObject *obj); + PyObject *(*create)(PyObject *obj); + PyObject *(*getobject)(PyObject *proxy); +} ProxyInterface; + +#ifndef PROXY_MODULE + +/* These are only defined in the public interface, and are not + * available within the module implementation. There we use the + * classic Python/C API only. + */ + +static ProxyInterface *_proxy_api = NULL; + +static int +Proxy_Import(void) +{ + if (_proxy_api == NULL) { + PyObject *m = PyImport_ImportModule("zope.proxy"); + if (m != NULL) { + PyObject *tmp = PyObject_GetAttrString(m, "_CAPI"); + if (tmp != NULL) { + if (PyCapsule_CheckExact(tmp)) + _proxy_api = (ProxyInterface *) + PyCapsule_GetPointer(tmp, NULL); + Py_DECREF(tmp); + } + } + } + return (_proxy_api == NULL) ? -1 : 0; +} + +#define ProxyType (*_proxy_api->proxytype) +#define Proxy_Check(obj) (_proxy_api->check((obj))) +#define Proxy_CheckExact(obj) ((obj)->ob_type == ProxyType) +#define Proxy_New(obj) (_proxy_api->create((obj))) +#define Proxy_GetObject(proxy) (_proxy_api->getobject((proxy))) + +#endif /* PROXY_MODULE */ + +#endif /* _proxy_H_ */ |