Commit ddcbd36e authored by Jim Fulton's avatar Jim Fulton

Fixed bug in get.

Added latest validation rules.
parent 7ce38986
...@@ -53,12 +53,12 @@ ...@@ -53,12 +53,12 @@
static char cDocumentTemplate_module_documentation[] = static char cDocumentTemplate_module_documentation[] =
"" ""
"\n$Id: cDocumentTemplate.c,v 1.2 1997/10/27 17:43:28 jim Exp $" "\n$Id: cDocumentTemplate.c,v 1.3 1997/10/28 21:52:58 jim Exp $"
; ;
#include "ExtensionClass.h" #include "ExtensionClass.h"
static PyObject *py_isDocTemp=0, *py_blocks=0, *py_=0, *join=0; static PyObject *py_isDocTemp=0, *py_blocks=0, *py_=0, *join=0, *py_acquire;
/* ----------------------------------------------------- */ /* ----------------------------------------------------- */
...@@ -150,16 +150,32 @@ InstanceDict_subscript( InstanceDictobject *self, PyObject *key) ...@@ -150,16 +150,32 @@ InstanceDict_subscript( InstanceDictobject *self, PyObject *key)
return PyObject_Str(self->inst); return PyObject_Str(self->inst);
} }
/* Do explicit acquisition with "roles" rule */
if(r=PyObject_GetAttr(self->inst, py_acquire))
{
if(self->validate != Py_None)
{
UNLESS_ASSIGN(r,PyObject_CallFunction(
r, "OOO", key, self->validate, self->namespace))
goto KeyError;
}
else
UNLESS(r=PyObject_GetAttr(self->inst, key)) goto KeyError;
}
else
{
/* OK, use getattr */ /* OK, use getattr */
UNLESS(r=PyObject_GetAttr(self->inst, key)) goto KeyError; UNLESS(r=PyObject_GetAttr(self->inst, key)) goto KeyError;
if(self->validate != Py_None) if(self->validate != Py_None)
{ {
UNLESS(v=PyObject_CallFunction(self->validate,"OOOO", UNLESS(v=PyObject_CallFunction(
self->namespace, self->inst, key, r)) self->validate,"OOOO",
self->inst, self->inst, key, r, self->namespace))
return NULL; return NULL;
Py_DECREF(v); Py_DECREF(v);
} }
}
if(r && PyObject_SetItem(self->cache, key, r) < 0) PyErr_Clear(); if(r && PyObject_SetItem(self->cache, key, r) < 0) PyErr_Clear();
...@@ -298,12 +314,12 @@ MM_cget(MM *self, PyObject *key, int call) ...@@ -298,12 +314,12 @@ MM_cget(MM *self, PyObject *key, int call)
else PyErr_Clear(); else PyErr_Clear();
/* Try calling the object */ /* Try calling the object */
if(dt) if(call)
ASSIGN(e,PyObject_CallFunction(e,"OO", Py_None, self)); {
else if(call && (rr=PyObject_CallObject(e,NULL))) if(dt) ASSIGN(e,PyObject_CallFunction(e,"OO", Py_None, self));
ASSIGN(e,rr); else if((rr=PyObject_CallObject(e,NULL))) ASSIGN(e,rr);
else else PyErr_Clear();
PyErr_Clear(); }
} }
return e; return e;
...@@ -338,7 +354,7 @@ static struct PyMethodDef MM_methods[] = { ...@@ -338,7 +354,7 @@ static struct PyMethodDef MM_methods[] = {
"push(mapping_object) -- Add a data source"}, "push(mapping_object) -- Add a data source"},
{"pop", (PyCFunction) MM_pop, 0, {"pop", (PyCFunction) MM_pop, 0,
"pop() -- Remove and return the last data source added"}, "pop() -- Remove and return the last data source added"},
{"pop", (PyCFunction) MM_get, 0, {"get", (PyCFunction) MM_get, METH_VARARGS,
"get(key[,call]) -- Get a value\n\n" "get(key[,call]) -- Get a value\n\n"
"Normally, callable objects that can be called without arguments are\n" "Normally, callable objects that can be called without arguments are\n"
"called during retrieval. This can be suppressed by providing a\n" "called during retrieval. This can be suppressed by providing a\n"
...@@ -519,10 +535,11 @@ void ...@@ -519,10 +535,11 @@ void
initcDocumentTemplate() initcDocumentTemplate()
{ {
PyObject *m, *d; PyObject *m, *d;
char *rev="$Revision: 1.2 $"; char *rev="$Revision: 1.3 $";
UNLESS(py_isDocTemp=PyString_FromString("isDocTemp")) return; UNLESS(py_isDocTemp=PyString_FromString("isDocTemp")) return;
UNLESS(py_blocks=PyString_FromString("blocks")) return; UNLESS(py_blocks=PyString_FromString("blocks")) return;
UNLESS(py_acquire=PyString_FromString("acquire")) return;
UNLESS(py_=PyString_FromString("")) return; UNLESS(py_=PyString_FromString("")) return;
UNLESS(join=PyImport_ImportModule("string")) return; UNLESS(join=PyImport_ImportModule("string")) return;
ASSIGN(join,PyObject_GetAttrString(join,"join")); ASSIGN(join,PyObject_GetAttrString(join,"join"));
...@@ -548,6 +565,10 @@ initcDocumentTemplate() ...@@ -548,6 +565,10 @@ initcDocumentTemplate()
Revision Log: Revision Log:
$Log: cDocumentTemplate.c,v $ $Log: cDocumentTemplate.c,v $
Revision 1.3 1997/10/28 21:52:58 jim
Fixed bug in get.
Added latest validation rules.
Revision 1.2 1997/10/27 17:43:28 jim Revision 1.2 1997/10/27 17:43:28 jim
Added some new experimental validation machinery. Added some new experimental validation machinery.
This is, still a work in progress. This is, still a work in progress.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment