Changeset 531


Ignore:
Timestamp:
Nov 13, 2015, 11:42:27 PM (4 years ago)
Author:
darcy
Message:

Further name changes and re-organization.
Move a little closer to Python 3.
Still passes unit tests under Python 2.7.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/module/pgmodule.c

    r530 r531  
    5454
    5555#ifndef IS_PY3K
    56 # if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
     56#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
    5757typedef int Py_ssize_t;
    5858#define PY_SSIZE_T_MAX INT_MAX
     
    571571/* destructor */
    572572static void
    573 pglarge_dealloc(largeObject *self)
     573largeDealloc(largeObject *self)
    574574{
    575575        if (self->lo_fd >= 0 && check_cnx_obj(self->pgcnx))
     
    910910        return Py_None;
    911911}
    912 
    913912
    914913/* large object methods */
     
    928927/* get attribute */
    929928static PyObject *
    930 pglarge_getattr(largeObject *self, char *name)
     929largeGetAttr(largeObject *self, char *name)
    931930{
    932931        /* list postgreSQL large object fields */
     
    988987/* prints query object in human readable format */
    989988static int
    990 pglarge_print(largeObject *self, FILE *fp, int flags)
     989largePrint(largeObject *self, FILE *fp, int flags)
    991990{
    992991        char            print_buffer[128];
     
    999998}
    1000999
     1000static char large__doc__[] = "PostgreSQL large object";
     1001
    10011002/* object type definition */
    10021003static PyTypeObject largeType = {
    1003         PyObject_HEAD_INIT(NULL)
    1004         0,                                                              /* ob_size */
     1004        PyVarObject_HEAD_INIT(NULL, 0)
    10051005        "PGlargeObject",                                /* tp_name */
    10061006        sizeof(largeObject),                    /* tp_basicsize */
     
    10081008
    10091009        /* methods */
    1010         (destructor) pglarge_dealloc,   /* tp_dealloc */
    1011         (printfunc) pglarge_print,              /* tp_print */
    1012         (getattrfunc) pglarge_getattr,  /* tp_getattr */
     1010        (destructor) largeDealloc,              /* tp_dealloc */
     1011        (printfunc) largePrint,                 /* tp_print */
     1012        (getattrfunc) largeGetAttr,             /* tp_getattr */
    10131013        0,                                                              /* tp_setattr */
    10141014        0,                                                              /* tp_compare */
     
    10181018        0,                                                              /* tp_as_mapping */
    10191019        0,                                                              /* tp_hash */
     1020        0,                              /* tp_call */
     1021        0,                                                              /* tp_str */
     1022        0,                                                              /* tp_getattro */
     1023        0,                              /* tp_setattro */
     1024        0,                              /* tp_as_buffer */
     1025        Py_TPFLAGS_DEFAULT,             /* tp_flags */
     1026        large__doc__,                                   /* tp_doc */
     1027        0,                              /* tp_traverse */
     1028        0,                              /* tp_clear */
     1029        0,                              /* tp_richcompare */
     1030        0,                              /* tp_weaklistoffset */
     1031        0,                              /* tp_iter */
     1032        0,                              /* tp_iternext */
     1033        largeMethods,                                   /* tp_methods */
    10201034};
    10211035#endif /* LARGE_OBJECTS */
     
    12801294
    12811295        if (!(npgobj = PyObject_NEW(queryObject, &queryType)))
    1282                 return NULL;
     1296        {
     1297                PyErr_SetString(PyExc_MemoryError, "Can't create query object");
     1298                return NULL;
     1299        }
    12831300
    12841301        /* stores result and returns object */
     
    13961413
    13971414static PyObject *
    1398 pgquery_repr(queryObject *self)
     1415queryRepr(queryObject *self)
    13991416{
    14001417        return PyBytes_FromString("<pg query result>");
     
    14021419
    14031420static PyObject *
    1404 pgquery_str(queryObject *self)
     1421queryStr(queryObject *self)
    14051422{
    14061423        return format_result(self->result);
     
    21692186
    21702187static PyObject *
    2171 connGetattr(connObject *self, char *name)
     2188connGetAttr(connObject *self, char *name)
    21722189{
    21732190        /*
     
    22622279/* object type definition */
    22632280static PyTypeObject connType = {
    2264         PyObject_HEAD_INIT(NULL)
    2265         0,                                                      /* ob_size */
     2281        PyVarObject_HEAD_INIT(NULL, 0)
    22662282        "PGconnObject",                         /* tp_name */
    22672283        sizeof(connObject),                     /* tp_basicsize */
    22682284        0,                                                      /* tp_itemsize */
     2285
    22692286        /* methods */
    22702287        (destructor) connDelete,        /* tp_dealloc */
    22712288        0,                                                      /* tp_print */
    2272         (getattrfunc) connGetattr,      /* tp_getattr */
     2289        (getattrfunc) connGetAttr,      /* tp_getattr */
    22732290        0,                                                      /* tp_setattr */
    2274         0,                                                      /* tp_compare */
     2291        0,                                                      /* tp_reserved */
    22752292        0,                                                      /* tp_repr */
    22762293        0,                                                      /* tp_as_number */
     
    22782295        0,                                                      /* tp_as_mapping */
    22792296        0,                                                      /* tp_hash */
     2297        0,                                                      /* tp_call */
     2298        0,                                                      /* tp_str */
     2299        0,                                                      /* tp_getattro */
     2300        0,                                                      /* tp_setattro */
     2301        0,                                                      /* tp_as_buffer */
     2302        Py_TPFLAGS_DEFAULT,         /* tp_flags */
     2303        0,                                                      /* tp_doc */
     2304        0,                                                      /* tp_traverse */
     2305        0,                                                      /* tp_clear */
     2306        0,                                                      /* tp_richcompare */
     2307        0,                                                      /* tp_weaklistoffset */
     2308        0,                                                      /* tp_iter */
     2309        0,                                                      /* tp_iternext */
     2310        connMethods,                            /* tp_methods */
    22802311};
    22812312
     
    23142345/* destructor */
    23152346static void
    2316 pgsource_dealloc(sourceObject *self)
     2347sourceDealloc(sourceObject *self)
    23172348{
    23182349        if (self->result)
     
    28112842/* gets query object attributes */
    28122843static PyObject *
    2813 pgsource_getattr(sourceObject *self, char *name)
     2844sourceGetAttr(sourceObject *self, char *name)
    28142845{
    28152846        /* pg connection object */
     
    28692900/* sets query object attributes */
    28702901static int
    2871 pgsource_setattr(sourceObject *self, char *name, PyObject *v)
     2902sourceSetAttr(sourceObject *self, char *name, PyObject *v)
    28722903{
    28732904        /* arraysize */
     
    28902921
    28912922static PyObject *
    2892 pgsource_repr(sourceObject *self)
     2923sourceRepr(sourceObject *self)
    28932924{
    28942925        return PyBytes_FromString("<pg source object>");
     
    28982929
    28992930static PyObject *
    2900 pgsource_str(sourceObject *self)
     2931sourceStr(sourceObject *self)
    29012932{
    29022933        switch (self->result_type)
     
    29132944}
    29142945
     2946static char source__doc__[] = "PyGreSQL source object";
     2947
    29152948/* query type definition */
    29162949static PyTypeObject sourceType = {
    2917         PyObject_HEAD_INIT(NULL)
    2918         0,                                                              /* ob_size */
     2950        PyVarObject_HEAD_INIT(NULL, 0)
    29192951        "PGsourceObject",                               /* tp_name */
    29202952        sizeof(sourceObject),                   /* tp_basicsize */
    29212953        0,                                                              /* tp_itemsize */
    29222954        /* methods */
    2923         (destructor) pgsource_dealloc,  /* tp_dealloc */
     2955        (destructor) sourceDealloc,             /* tp_dealloc */
    29242956        0,                                                              /* tp_print */
    2925         (getattrfunc) pgsource_getattr, /* tp_getattr */
    2926         (setattrfunc) pgsource_setattr, /* tp_setattr */
     2957        (getattrfunc) sourceGetAttr,    /* tp_getattr */
     2958        (setattrfunc) sourceSetAttr,    /* tp_setattr */
    29272959        0,                                                              /* tp_compare */
    2928         (reprfunc) pgsource_repr,               /* tp_repr */
     2960        (reprfunc) sourceRepr,                  /* tp_repr */
    29292961        0,                                                              /* tp_as_number */
    29302962        0,                                                              /* tp_as_sequence */
     
    29322964        0,                                                              /* tp_hash */
    29332965        0,                                                              /* tp_call */
    2934         (reprfunc) pgsource_str,                /* tp_str */
     2966        (reprfunc) sourceStr,                   /* tp_str */
     2967        0,                                                              /* tp_getattro */
     2968        0,                                                              /* tp_setattro */
     2969        0,                                                              /* tp_as_buffer */
     2970        Py_TPFLAGS_DEFAULT,                             /* tp_flags */
     2971        source__doc__,                                  /* tp_doc */
     2972        0,                                                              /* tp_traverse */
     2973        0,                                                              /* tp_clear */
     2974        0,                                                              /* tp_richcompare */
     2975        0,                                                              /* tp_weaklistoffset */
     2976        0,                                                              /* tp_iter */
     2977        0,                                                              /* tp_iternext */
     2978        sourceMethods,                                  /* tp_methods */
    29352979};
    29362980
     
    30293073
    30303074static void
    3031 pgquery_dealloc(queryObject *self)
     3075queryDealloc(queryObject *self)
    30323076{
    30333077        if (self->result)
     
    30383082
    30393083/* get number of rows */
    3040 static char pgquery_ntuples__doc__[] =
     3084static char queryNTuples__doc__[] =
    30413085"ntuples() -- returns number of tuples returned by query.";
    30423086
    30433087static PyObject *
    3044 pgquery_ntuples(queryObject *self, PyObject *args)
     3088queryNTuples(queryObject *self, PyObject *args)
    30453089{
    30463090        /* checks args */
     
    30563100
    30573101/* list fields names from query result */
    3058 static char pgquery_listfields__doc__[] =
     3102static char queryListFields__doc__[] =
    30593103"listfields() -- Lists field names from result.";
    30603104
    30613105static PyObject *
    3062 pgquery_listfields(queryObject *self, PyObject *args)
     3106queryListFields(queryObject *self, PyObject *args)
    30633107{
    30643108        int                     i,
     
    30913135
    30923136/* get field name from last result */
    3093 static char pgquery_fieldname__doc__[] =
     3137static char queryFieldName__doc__[] =
    30943138"fieldname() -- returns name of field from result from its position.";
    30953139
    30963140static PyObject *
    3097 pgquery_fieldname(queryObject *self, PyObject *args)
     3141queryFieldName(queryObject *self, PyObject *args)
    30983142{
    30993143        int             i;
     
    31213165
    31223166/* gets fields number from name in last result */
    3123 static char pgquery_fieldnum__doc__[] =
     3167static char queryFieldNumber__doc__[] =
    31243168"fieldnum() -- returns position in query for field from its name.";
    31253169
    31263170static PyObject *
    3127 pgquery_fieldnum(queryObject *self, PyObject *args)
     3171queryFieldNumber(queryObject *self, PyObject *args)
    31283172{
    31293173        int             num;
     
    31483192
    31493193/* retrieves last result */
    3150 static char pgquery_getresult__doc__[] =
     3194static char queryGetResult__doc__[] =
    31513195"getresult() -- Gets the result of a query.  The result is returned "
    31523196"as a list of rows, each one a tuple of fields in the order returned "
     
    31543198
    31553199static PyObject *
    3156 pgquery_getresult(queryObject *self, PyObject *args)
     3200queryGetResult(queryObject *self, PyObject *args)
    31573201{
    31583202        PyObject   *rowtuple,
     
    32143258                                        case 3:  /* float/double */
    32153259                                                tmp_obj = PyBytes_FromString(s);
     3260#ifdef IS_PY3K
     3261                                                val = PyFloat_FromString(tmp_obj);
     3262#else
    32163263                                                val = PyFloat_FromString(tmp_obj, NULL);
     3264#endif
    32173265                                                Py_DECREF(tmp_obj);
    32183266                                                break;
     
    32233271                                                         s++)
    32243272                                                {
    3225                                                         if (isdigit(*s))
     3273                                                        if (isdigit((int)*s))
    32263274                                                                cashbuf[k++] = *s;
    32273275                                                        else if (*s == *decimal_point)
     
    32433291                                                {
    32443292                                                        tmp_obj = PyBytes_FromString(s);
     3293#ifdef IS_PY3K
     3294                                                        val = PyFloat_FromString(tmp_obj);
     3295#else
    32453296                                                        val = PyFloat_FromString(tmp_obj, NULL);
     3297#endif
    32463298                                                }
    32473299                                                Py_DECREF(tmp_obj);
     
    32753327
    32763328/* retrieves last result as a list of dictionaries*/
    3277 static char pgquery_dictresult__doc__[] =
     3329static char queryDictResult__doc__[] =
    32783330"dictresult() -- Gets the result of a query.  The result is returned "
    32793331"as a list of rows, each one a dictionary with the field names used "
     
    32813333
    32823334static PyObject *
    3283 pgquery_dictresult(queryObject *self, PyObject *args)
     3335queryDictResult(queryObject *self, PyObject *args)
    32843336{
    32853337        PyObject   *dict,
     
    33413393                                        case 3:  /* float/double */
    33423394                                                tmp_obj = PyBytes_FromString(s);
     3395#ifdef IS_PY3K
     3396                                                val = PyFloat_FromString(tmp_obj);
     3397#else
    33433398                                                val = PyFloat_FromString(tmp_obj, NULL);
     3399#endif
    33443400                                                Py_DECREF(tmp_obj);
    33453401                                                break;
     
    33503406                                                         s++)
    33513407                                                {
    3352                                                         if (isdigit(*s))
     3408                                                        if (isdigit((int)*s))
    33533409                                                                cashbuf[k++] = *s;
    33543410                                                        else if (*s == *decimal_point)
     
    33703426                                                {
    33713427                                                        tmp_obj = PyBytes_FromString(s);
     3428#ifdef IS_PY3K
     3429                                                        val = PyFloat_FromString(tmp_obj);
     3430#else
    33723431                                                        val = PyFloat_FromString(tmp_obj, NULL);
     3432#endif
    33733433                                                }
    33743434                                                Py_DECREF(tmp_obj);
     
    34033463
    34043464/* retrieves last result as named tuples */
    3405 static char pgquery_namedresult__doc__[] =
     3465static char queryNamedResult__doc__[] =
    34063466"namedresult() -- Gets the result of a query.  The result is returned "
    34073467"as a list of rows, each one a tuple of fields in the order returned "
     
    34093469
    34103470static PyObject *
    3411 pgquery_namedresult(queryObject *self, PyObject *args)
     3471queryNamedResult(queryObject *self, PyObject *args)
    34123472{
    34133473        PyObject   *arglist,
     
    34423502/* get attribute */
    34433503static PyObject *
    3444 pgnotice_getattr(noticeObject *self, char *name)
     3504noticeGetAttr(noticeObject *self, char *name)
    34453505{
    34463506        PGresult const *res = self->res;
     
    35153575
    35163576static PyObject *
    3517 pgnotice_str(noticeObject *self)
    3518 {
    3519         return pgnotice_getattr(self, "message");
     3577noticeStr(noticeObject *self)
     3578{
     3579        return noticeGetAttr(self, "message");
    35203580}
    35213581
    35223582/* object type definition */
    35233583static PyTypeObject noticeType = {
    3524         PyObject_HEAD_INIT(NULL)
    3525         0,                                                              /* ob_size */
     3584        PyVarObject_HEAD_INIT(NULL, 0)
    35263585        "PGnoticeObject",                               /* tp_name */
    35273586        sizeof(noticeObject),                   /* tp_basicsize */
     
    35303589        0,                                                              /* tp_dealloc */
    35313590        0,                                                              /* tp_print */
    3532         (getattrfunc) pgnotice_getattr, /* tp_getattr */
     3591        (getattrfunc) noticeGetAttr,    /* tp_getattr */
    35333592        0,                                                              /* tp_setattr */
    35343593        0,                                                              /* tp_compare */
     
    35393598        0,                                                              /* tp_hash */
    35403599        0,                                                              /* tp_call */
    3541         (reprfunc) pgnotice_str                 /* tp_str */
     3600        (reprfunc) noticeStr                    /* tp_str */
    35423601};
    3543 
    35443602
    35453603/* query object methods */
    35463604static struct PyMethodDef queryMethods[] = {
    3547         {"getresult", (PyCFunction) pgquery_getresult, METH_VARARGS,
    3548                         pgquery_getresult__doc__},
    3549         {"dictresult", (PyCFunction) pgquery_dictresult, METH_VARARGS,
    3550                         pgquery_dictresult__doc__},
    3551         {"namedresult", (PyCFunction) pgquery_namedresult, METH_VARARGS,
    3552                         pgquery_namedresult__doc__},
    3553         {"fieldname", (PyCFunction) pgquery_fieldname, METH_VARARGS,
    3554                          pgquery_fieldname__doc__},
    3555         {"fieldnum", (PyCFunction) pgquery_fieldnum, METH_VARARGS,
    3556                         pgquery_fieldnum__doc__},
    3557         {"listfields", (PyCFunction) pgquery_listfields, METH_VARARGS,
    3558                         pgquery_listfields__doc__},
    3559         {"ntuples", (PyCFunction) pgquery_ntuples, METH_VARARGS,
    3560                         pgquery_ntuples__doc__},
     3605        {"getresult", (PyCFunction) queryGetResult, METH_VARARGS,
     3606                        queryGetResult__doc__},
     3607        {"dictresult", (PyCFunction) queryDictResult, METH_VARARGS,
     3608                        queryDictResult__doc__},
     3609        {"namedresult", (PyCFunction) queryNamedResult, METH_VARARGS,
     3610                        queryNamedResult__doc__},
     3611        {"fieldname", (PyCFunction) queryFieldName, METH_VARARGS,
     3612                         queryFieldName__doc__},
     3613        {"fieldnum", (PyCFunction) queryFieldNumber, METH_VARARGS,
     3614                        queryFieldNumber__doc__},
     3615        {"listfields", (PyCFunction) queryListFields, METH_VARARGS,
     3616                        queryListFields__doc__},
     3617        {"ntuples", (PyCFunction) queryNTuples, METH_VARARGS,
     3618                        queryNTuples__doc__},
    35613619        {NULL, NULL}
    35623620};
     
    35643622/* gets query object attributes */
    35653623static PyObject *
    3566 pgquery_getattr(queryObject *self, char *name)
    3567 {
    3568         /* list postgreSQL connection fields */
     3624queryGetAttr(queryObject *self, char *name)
     3625{
    35693626        return Py_FindMethod(queryMethods, (PyObject *) self, name);
    35703627}
     
    35723629/* query type definition */
    35733630static PyTypeObject queryType = {
    3574         PyObject_HEAD_INIT(NULL)
    3575         0,                                                              /* ob_size */
     3631        PyVarObject_HEAD_INIT(NULL, 0)
    35763632        "PGqueryObject",                                /* tp_name */
    35773633        sizeof(queryObject),                    /* tp_basicsize */
    35783634        0,                                                              /* tp_itemsize */
    35793635        /* methods */
    3580         (destructor) pgquery_dealloc,   /* tp_dealloc */
     3636        (destructor) queryDealloc,              /* tp_dealloc */
    35813637        0,                                                              /* tp_print */
    3582         (getattrfunc) pgquery_getattr,  /* tp_getattr */
     3638        (getattrfunc) queryGetAttr,             /* tp_getattr */
    35833639        0,                                                              /* tp_setattr */
    35843640        0,                                                              /* tp_compare */
    3585         (reprfunc) pgquery_repr,                /* tp_repr */
     3641        (reprfunc) queryRepr,                   /* tp_repr */
    35863642        0,                                                              /* tp_as_number */
    35873643        0,                                                              /* tp_as_sequence */
     
    35893645        0,                                                              /* tp_hash */
    35903646        0,                                                              /* tp_call */
    3591         (reprfunc) pgquery_str                  /* tp_str */
     3647        (reprfunc) queryStr,                    /* tp_str */
     3648        0,                                                              /* tp_getattro */
     3649        0,                                                              /* tp_setattro */
     3650        0,                                                              /* tp_as_buffer */
     3651        Py_TPFLAGS_DEFAULT,                             /* tp_flags */
     3652        0,                                                              /* tp_doc */
     3653        0,                                                              /* tp_traverse */
     3654        0,                                                              /* tp_clear */
     3655        0,                                                              /* tp_richcompare */
     3656        0,                                                              /* tp_weaklistoffset */
     3657        0,                                                              /* tp_iter */
     3658        0,                                                              /* tp_iternext */
     3659        queryMethods,                                   /* tp_methods */
    35923660};
    3593 
    35943661
    35953662/* --------------------------------------------------------------------- */
     
    41484215static char pg__doc__[] = "Python interface to PostgreSQL DB";
    41494216
     4217#ifdef IS_PY3K
     4218static struct PyModuleDef pgType = {
     4219        PyModuleDef_HEAD_INIT,
     4220        "pg",
     4221        pg__doc__,
     4222        -1,
     4223        pgMethods,
     4224        NULL,
     4225        NULL,
     4226        NULL,
     4227        NULL
     4228};
     4229#endif
     4230
    41504231/* Initialization function for the module */
    4151 void
    4152 init_pg(void)
     4232#ifdef IS_PY3K
     4233PyMODINIT_FUNC PyInit__pg(void)
     4234#else
     4235void init_pg(void)
     4236#endif
    41534237{
    41544238        PyObject   *mod,
     
    41564240                           *v;
    41574241
     4242        /* Create the module and add the functions */
     4243#ifdef IS_PY3K
     4244        mod = PyModule_Create(&pgType);
     4245#else
    41584246        /* Initialize here because some WIN platforms get confused otherwise */
    41594247        connType.ob_type = noticeType.ob_type =
    41604248                queryType.ob_type = sourceType.ob_type = &PyType_Type;
     4249
    41614250#ifdef LARGE_OBJECTS
    41624251        largeType.ob_type = &PyType_Type;
    41634252#endif
    41644253
    4165         /* Create the module and add the functions */
    41664254        mod = Py_InitModule4("_pg", pgMethods, pg__doc__, NULL, PYTHON_API_VERSION);
     4255#endif
    41674256        dict = PyModule_GetDict(mod);
    41684257
    41694258        /* Exceptions as defined by DB-API 2.0 */
    4170         Error = PyErr_NewException("pg.Error", PyExc_StandardError, NULL);
     4259        Error = PyErr_NewException("pg.Error", PyExc_Exception, NULL);
    41714260        PyDict_SetItemString(dict, "Error", Error);
    41724261
    4173         Warning = PyErr_NewException("pg.Warning", PyExc_StandardError, NULL);
     4262        Warning = PyErr_NewException("pg.Warning", PyExc_Exception, NULL);
    41744263        PyDict_SetItemString(dict, "Warning", Warning);
    41754264
     
    42534342        if (PyErr_Occurred())
    42544343                Py_FatalError("can't initialize module _pg");
    4255 }
     4344
     4345#ifdef IS_PY3K
     4346        return mod;
     4347#endif
     4348}
Note: See TracChangeset for help on using the changeset viewer.