plug-ins/pygimp/gimpmodule.c plug-ins/pygimp/pygimp-drawable.c

2003-12-03  Manish Singh  <yosh@gimp.org>

        * plug-ins/pygimp/gimpmodule.c
        * plug-ins/pygimp/pygimp-drawable.c
        * plug-ins/pygimp/pygimp-image.c
        * plug-ins/pygimp/pygimp-pdb.c
        * plug-ins/pygimp/pygimp-tile.c: some cosmetic changes to error
        messages.

        * plug-ins/pygimp/pygimp-drawable.c: accessors for name, tattoo, and
        visible live in the drawable class now, so layer and channel objects
        inherit it.
This commit is contained in:
Manish Singh 2003-12-03 21:52:09 +00:00 committed by Manish Singh
parent e8008b834f
commit 0518761f23
6 changed files with 127 additions and 180 deletions

View file

@ -1,3 +1,16 @@
2003-12-03 Manish Singh <yosh@gimp.org>
* plug-ins/pygimp/gimpmodule.c
* plug-ins/pygimp/pygimp-drawable.c
* plug-ins/pygimp/pygimp-image.c
* plug-ins/pygimp/pygimp-pdb.c
* plug-ins/pygimp/pygimp-tile.c: some cosmetic changes to error
messages.
* plug-ins/pygimp/pygimp-drawable.c: accessors for name, tattoo, and
visible live in the drawable class now, so layer and channel objects
inherit it.
2003-12-03 Sven Neumann <sven@gimp.org>
* libgimp/gimp.def: updated.

View file

@ -156,11 +156,11 @@ pygimp_main(PyObject *self, PyObject *args)
if (!Arg_Check(ip) || !Arg_Check(qp) || !Arg_Check(query) ||
!Arg_Check(rp)) {
PyErr_SetString(pygimp_error, "arguments must be callable.");
PyErr_SetString(pygimp_error, "arguments must be callable");
return NULL;
}
if (query == Py_None) {
PyErr_SetString(pygimp_error, "a query procedure must be provided.");
PyErr_SetString(pygimp_error, "a query procedure must be provided");
return NULL;
}

View file

@ -216,6 +216,27 @@ drw_get_ID(PyGimpDrawable *self, void *closure)
return PyInt_FromLong(self->ID);
}
static PyObject *
drw_get_name(PyGimpDrawable *self, void *closure)
{
return PyString_FromString(gimp_drawable_get_name(self->ID));
}
static int
drw_set_name(PyGimpDrawable *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "cannot delete name");
return -1;
}
if (!PyString_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_drawable_set_name(self->ID, PyString_AsString(value));
return 0;
}
static PyObject *
drw_get_bpp(PyGimpDrawable *self, void *closure)
{
@ -300,8 +321,51 @@ drw_get_width(PyGimpDrawable *self, void *closure)
return PyInt_FromLong(gimp_drawable_width(self->ID));
}
static PyObject *
drw_get_tattoo(PyGimpDrawable *self, void *closure)
{
return PyInt_FromLong(gimp_drawable_get_tattoo(self->ID));
}
static int
drw_set_tattoo(PyGimpDrawable *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "cannot delete tattoo");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_drawable_set_tattoo(self->ID, PyInt_AsLong(value));
return 0;
}
static PyObject *
drw_get_visible(PyGimpDrawable *self, void *closure)
{
return PyInt_FromLong(gimp_drawable_get_visible(self->ID));
}
static int
drw_set_visible(PyGimpDrawable *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "cannot delete visible");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_drawable_set_visible(self->ID, PyInt_AsLong(value));
return 0;
}
static PyGetSetDef drw_getsets[] = {
{ "ID", (getter)drw_get_ID, (setter)0 },
{ "name", (getter)drw_get_name, (setter)drw_set_name },
{ "bpp", (getter)drw_get_bpp, (setter)0 },
{ "has_alpha", (getter)drw_get_has_alpha, (setter)0 },
{ "height", (getter)drw_get_height, (setter)0 },
@ -316,11 +380,13 @@ static PyGetSetDef drw_getsets[] = {
{ "type", (getter)drw_get_type, (setter)0 },
{ "type_with_alpha", (getter)drw_get_type_with_alpha, (setter)0 },
{ "width", (getter)drw_get_width, (setter)0 },
{ "tattoo", (getter)drw_get_tattoo, (setter)drw_set_tattoo },
{ "visible", (getter)drw_get_visible, (setter)drw_set_visible },
{ NULL, (getter)0, (setter)0 }
};
static void
drw_dealloc(PyGimpLayer *self)
drw_dealloc(PyGimpDrawable *self)
{
if (self->drawable)
gimp_drawable_detach(self->drawable);
@ -328,7 +394,7 @@ drw_dealloc(PyGimpLayer *self)
}
static PyObject *
drw_repr(PyGimpLayer *self)
drw_repr(PyGimpDrawable *self)
{
PyObject *s;
gchar *name;
@ -340,7 +406,7 @@ drw_repr(PyGimpLayer *self)
}
static int
drw_cmp(PyGimpLayer *self, PyGimpLayer *other)
drw_cmp(PyGimpDrawable *self, PyGimpDrawable *other)
{
if (self->ID == other->ID) return 0;
if (self->ID > other->ID) return -1;
@ -558,11 +624,11 @@ static int
lay_set_apply_mask(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete apply_mask.");
PyErr_SetString(PyExc_TypeError, "cannot delete apply_mask");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_layer_set_apply_mask(self->ID, PyInt_AsLong(value));
@ -578,11 +644,11 @@ static int
lay_set_edit_mask(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete edit_mask.");
PyErr_SetString(PyExc_TypeError, "cannot delete edit_mask");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_layer_set_edit_mask(self->ID, PyInt_AsLong(value));
@ -599,11 +665,11 @@ static int
lay_set_linked(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete linked.");
PyErr_SetString(PyExc_TypeError, "cannot delete linked");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_layer_set_linked(self->ID, PyInt_AsLong(value));
@ -620,38 +686,17 @@ static int
lay_set_mode(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete mode.");
PyErr_SetString(PyExc_TypeError, "cannot delete mode");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_layer_set_mode(self->ID, (GimpLayerModeEffects)PyInt_AsLong(value));
return 0;
}
static PyObject *
lay_get_name(PyGimpLayer *self, void *closure)
{
return PyString_FromString(gimp_drawable_get_name(self->ID));
}
static int
lay_set_name(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete name.");
return -1;
}
if (!PyString_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
return -1;
}
gimp_drawable_set_name(self->ID, PyString_AsString(value));
return 0;
}
static PyObject *
lay_get_opacity(PyGimpLayer *self, void *closure)
{
@ -662,11 +707,11 @@ static int
lay_set_opacity(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete opacity.");
PyErr_SetString(PyExc_TypeError, "cannot delete opacity");
return -1;
}
if (!PyFloat_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_layer_set_opacity(self->ID, PyFloat_AsDouble(value));
@ -684,11 +729,11 @@ lay_set_preserve_trans(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError,
"can not delete preserve_transparency.");
"cannot delete preserve_transparency");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_layer_set_preserve_trans(self->ID, PyInt_AsLong(value));
@ -705,59 +750,17 @@ static int
lay_set_show_mask(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete show_mask.");
PyErr_SetString(PyExc_TypeError, "cannot delete show_mask");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_layer_set_show_mask(self->ID, PyInt_AsLong(value));
return 0;
}
static PyObject *
lay_get_tattoo(PyGimpLayer *self, void *closure)
{
return PyInt_FromLong(gimp_drawable_get_tattoo(self->ID));
}
static int
lay_set_tattoo(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete tattoo.");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
return -1;
}
gimp_drawable_set_tattoo(self->ID, PyInt_AsLong(value));
return 0;
}
static PyObject *
lay_get_visible(PyGimpLayer *self, void *closure)
{
return PyInt_FromLong(gimp_drawable_get_visible(self->ID));
}
static int
lay_set_visible(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete visible.");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
return -1;
}
gimp_drawable_set_visible(self->ID, PyInt_AsLong(value));
return 0;
}
static PyGetSetDef lay_getsets[] = {
{ "is_floating_sel", (getter)lay_get_is_floating_sel, (setter)0 },
{ "mask", (getter)lay_get_mask, (setter)0 },
@ -765,13 +768,10 @@ static PyGetSetDef lay_getsets[] = {
{ "edit_mask", (getter)lay_get_edit_mask, (setter)lay_set_edit_mask },
{ "linked", (getter)lay_get_linked, (setter)lay_set_linked },
{ "mode", (getter)lay_get_mode, (setter)lay_set_mode },
{ "name", (getter)lay_get_name, (setter)lay_set_name },
{ "opacity", (getter)lay_get_opacity, (setter)lay_set_opacity },
{ "preserve_trans", (getter)lay_get_preserve_trans,
(setter)lay_set_preserve_trans },
{ "show_mask", (getter)lay_get_show_mask, (setter)lay_set_show_mask },
{ "tattoo", (getter)lay_get_tattoo, (setter)lay_set_tattoo },
{ "visible", (getter)lay_get_visible, (setter)lay_set_visible },
{ NULL, (getter)0, (setter)0 }
};
@ -927,12 +927,12 @@ chn_set_color(PyGimpChannel *self, PyObject *value, void *closure)
GimpRGB colour;
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete colour.");
PyErr_SetString(PyExc_TypeError, "cannot delete colour");
return -1;
}
if (!PyTuple_Check(value) || !PyArg_ParseTuple(value, "(BBB)", &r,&g,&b)) {
PyErr_Clear();
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_rgb_set_uchar(&colour, r, g, b);
@ -940,27 +940,6 @@ chn_set_color(PyGimpChannel *self, PyObject *value, void *closure)
return 0;
}
static PyObject *
chn_get_name(PyGimpChannel *self, void *closure)
{
return PyString_FromString(gimp_drawable_get_name(self->ID));
}
static int
chn_set_name(PyGimpChannel *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete name.");
return -1;
}
if (!PyString_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
return -1;
}
gimp_drawable_set_name(self->ID, PyString_AsString(value));
return 0;
}
static PyObject *
chn_get_opacity(PyGimpLayer *self, void *closure)
{
@ -971,11 +950,11 @@ static int
chn_set_opacity(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete opacity.");
PyErr_SetString(PyExc_TypeError, "cannot delete opacity");
return -1;
}
if (!PyFloat_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_channel_set_opacity(self->ID, PyFloat_AsDouble(value));
@ -992,67 +971,22 @@ static int
chn_set_show_masked(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete show_masked.");
PyErr_SetString(PyExc_TypeError, "cannot delete show_masked");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_channel_set_show_masked(self->ID, PyInt_AsLong(value));
return 0;
}
static PyObject *
chn_get_tattoo(PyGimpChannel *self, void *closure)
{
return PyInt_FromLong(gimp_drawable_get_tattoo(self->ID));
}
static int
chn_set_tattoo(PyGimpChannel *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete tattoo.");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
return -1;
}
gimp_drawable_set_tattoo(self->ID, PyInt_AsLong(value));
return 0;
}
static PyObject *
chn_get_visible(PyGimpLayer *self, void *closure)
{
return PyInt_FromLong(gimp_drawable_get_visible(self->ID));
}
static int
chn_set_visible(PyGimpLayer *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete visible.");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
return -1;
}
gimp_drawable_set_visible(self->ID, PyInt_AsLong(value));
return 0;
}
static PyGetSetDef chn_getsets[] = {
{ "color", (getter)chn_get_color, (setter)chn_set_color },
{ "colour", (getter)chn_get_color, (setter)chn_set_color },
{ "name", (getter)chn_get_name, (setter)chn_set_name },
{ "opacity", (getter)chn_get_opacity, (setter)chn_set_opacity },
{ "show_masked", (getter)chn_get_show_masked, (setter)chn_set_show_masked},
{ "tattoo", (getter)chn_get_tattoo, (setter)chn_set_tattoo },
{ "visible", (getter)chn_get_visible, (setter)chn_set_visible },
{ NULL, (getter)0, (setter)0 }
};

View file

@ -127,7 +127,7 @@ img_merge_visible_layers(PyGimpImage *self, PyObject *args)
return NULL;
id = gimp_image_merge_visible_layers(self->ID, merge);
if (id == -1) {
PyErr_SetString(pygimp_error, "Can't merge layers.");
PyErr_SetString(pygimp_error, "Can't merge layers");
return NULL;
}
return pygimp_layer_new(id);
@ -145,7 +145,7 @@ img_merge_down(PyGimpImage *self, PyObject *args)
return NULL;
id = gimp_image_merge_down(self->ID, layer->ID, merge);
if (id == -1) {
PyErr_SetString(pygimp_error, "Can't merge layers.");
PyErr_SetString(pygimp_error, "Can't merge layers");
return NULL;
}
return pygimp_layer_new(id);
@ -549,11 +549,11 @@ static int
img_set_active_channel(PyGimpImage *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete active_channel.");
PyErr_SetString(PyExc_TypeError, "cannot delete active_channel");
return -1;
}
if (!pygimp_channel_check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_image_set_active_channel(self->ID, ((PyGimpChannel *)value)->ID);
@ -588,11 +588,11 @@ static int
img_set_active_layer(PyGimpImage *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete active_layer.");
PyErr_SetString(PyExc_TypeError, "cannot delete active_layer");
return -1;
}
if (!pygimp_layer_check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_image_set_active_layer(self->ID, ((PyGimpLayer *)value)->ID);
@ -637,11 +637,11 @@ static int
img_set_cmap(PyGimpImage *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete cmap.");
PyErr_SetString(PyExc_TypeError, "cannot delete cmap");
return -1;
}
if (!PyString_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_image_set_cmap(self->ID, PyString_AsString(value),
@ -668,11 +668,11 @@ static int
img_set_filename(PyGimpImage *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete filename.");
PyErr_SetString(PyExc_TypeError, "cannot delete filename");
return -1;
}
if (!PyString_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_image_set_filename(self->ID, PyString_AsString(value));
@ -751,11 +751,11 @@ static int
img_set_tattoo_state(PyGimpImage *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete tattoo_state.");
PyErr_SetString(PyExc_TypeError, "cannot delete tattoo_state");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_image_set_tattoo_state(self->ID, PyInt_AsLong(value));
@ -789,13 +789,13 @@ img_set_resolution(PyGimpImage *self, PyObject *value, void *closure)
gdouble xres, yres;
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete filename.");
PyErr_SetString(PyExc_TypeError, "cannot delete resolution");
return -1;
}
if (!PySequence_Check(value) ||
!PyArg_ParseTuple(value, "dd", &xres, &yres)) {
PyErr_Clear();
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_image_set_resolution(self->ID, xres, yres);
@ -812,11 +812,11 @@ static int
img_set_unit(PyGimpImage *self, PyObject *value, void *closure)
{
if (value == NULL) {
PyErr_SetString(PyExc_TypeError, "can not delete filename.");
PyErr_SetString(PyExc_TypeError, "cannot delete unit");
return -1;
}
if (!PyInt_Check(value)) {
PyErr_SetString(PyExc_TypeError, "type mis-match.");
PyErr_SetString(PyExc_TypeError, "type mismatch");
return -1;
}
gimp_image_set_unit(self->ID, PyInt_AsLong(value));

View file

@ -588,7 +588,7 @@ pdb_subscript(PyGimpPDB *self, PyObject *key)
PyObject *r;
if (!PyString_Check(key)) {
PyErr_SetString(PyExc_TypeError, "Subscript must be a string.");
PyErr_SetString(PyExc_TypeError, "Subscript must be a string");
return NULL;
}
r = (PyObject *)pygimp_pdb_function_new(PyString_AsString(key));
@ -677,7 +677,7 @@ pygimp_pdb_function_new(char *name)
if (!gimp_procedural_db_proc_info (name, &b, &h, &a, &c, &d, &pt,
&np, &nr, &p, &r)) {
PyErr_SetString(pygimp_error, "procedure not found.");
PyErr_SetString(pygimp_error, "procedure not found");
return NULL;
}
@ -829,7 +829,7 @@ pf_call(PyGimpPDBFunction *self, PyObject *args, PyObject *kwargs)
fprintf(stderr, "unknown - %i (type %i)\n",
ret[0].data.d_status, ret[0].type);
#endif
PyErr_SetString(pygimp_error, "unknown return code.");
PyErr_SetString(pygimp_error, "unknown return code");
return NULL;
break;
}

View file

@ -317,7 +317,7 @@ pr_dealloc(PyGimpPixelRgn *self)
static int
pr_length(PyGimpPixelRgn *self)
{
PyErr_SetString(pygimp_error, "Can't get size of pixel region.");
PyErr_SetString(pygimp_error, "Can't get size of pixel region");
return -1;
}
@ -330,7 +330,7 @@ pr_subscript(PyGimpPixelRgn *self, PyObject *key)
int x1, y1, x2, y2, xs, ys;
if (!PyTuple_Check(key) || PyTuple_Size(key) != 2) {
PyErr_SetString(PyExc_TypeError,"subscript must be a 2-tuple.");
PyErr_SetString(PyExc_TypeError, "subscript must be a 2-tuple");
return NULL;
}
if (!PyArg_ParseTuple(key, "OO", &x, &y))
@ -437,7 +437,7 @@ pr_ass_sub(PyGimpPixelRgn *self, PyObject *v, PyObject *w)
int len, x1, x2, xs, y1, y2, ys;
if (w == NULL) {
PyErr_SetString(PyExc_TypeError, "can't delete subscripts.");
PyErr_SetString(PyExc_TypeError, "can't delete subscripts");
return -1;
}
if (!PyString_Check(w)) {
@ -446,7 +446,7 @@ pr_ass_sub(PyGimpPixelRgn *self, PyObject *v, PyObject *w)
return -1;
}
if (!PyTuple_Check(v) || PyTuple_Size(v) != 2) {
PyErr_SetString(PyExc_TypeError,"subscript must be a 2-tuple");
PyErr_SetString(PyExc_TypeError, "subscript must be a 2-tuple");
return -1;
}
if (!PyArg_ParseTuple(v, "OO", &x, &y))