Beispiel #1
0
static PyObject *
CSVParser_fread(CSVParser *self, size_t size)
{
    char *buf = PyMem_Malloc(sizeof(char)*size);
    if(buf==NULL){
        PyErr_NoMemory();
        return NULL;
    }
    char c;
    size_t readsize;
    PyObject *datas = PyList_New(0);
    if(self->fields==NULL){
        parse_reset(self);
    }
    while(size){
        PyFile_IncUseCount((PyFileObject*)self->pyfile);
        Py_BEGIN_ALLOW_THREADS
        readsize = fread(buf, 1, size, self->file);
        Py_END_ALLOW_THREADS
        PyFile_DecUseCount((PyFileObject*)self->pyfile);
        if(readsize==0)
            break;

        size -= readsize;
        while(readsize--) {
            logq_readc(buf)
        }
    }
err:
    return datas;
}
Beispiel #2
0
static PyObject *
CSVParser_iternext(CSVParser *self)
{
    if(!self->is_file)
        return CSVParser_iternext_filelike(self);
    char buf[MAXBUFSIZE];
    char c;
    char *cp;
    PyObject *fields = NULL;
    long i;
    long linelen;
    Logq_Engine_reset(self->engine);
    while(!self->engine->is_success){
        if (parse_reset(self) < 0)
            return NULL;
        do {
            PyFile_IncUseCount((PyFileObject*)self->pyfile);
            Py_BEGIN_ALLOW_THREADS
            cp = fgets(buf, MAXBUFSIZE, self->file);
            Py_END_ALLOW_THREADS
            PyFile_DecUseCount((PyFileObject*)self->pyfile);
            if (cp == NULL) {
                /* End of input OR exception */
                if (!PyErr_Occurred() && (self->field_len != 0 ||
                                          self->state == IN_QUOTED_FIELD)) {
                    if (parse_save_field(self) >= 0 )
                        break;
                }
                return NULL;
            }
            ++self->line_num;
            linelen = strlen(buf);
            if (buf == NULL || linelen < 0) {
                return NULL;
            }
            for(i=0; i<linelen; ++i){
                c = buf[i];
                if (c == '\0') {
                    PyErr_Format(csv_error_obj,
                                 "line contains NULL byte");
                    goto err;
                }
                if (parse_process_char(self, c) < 0) {
                    goto err;
                }
                //query fail. go next line
                if (self->state == QUERY_FAIL){
                    if(buf[linelen-1]=='\n'){
                        self->state = START_RECORD;
                    }
                    break;
                }
            }
        } while (self->state != START_RECORD);
    }
    fields = self->fields;
    self->fields = NULL;
err:
    return fields;
}
Beispiel #3
0
static PyObject*
FileWrapper_New(PyObject* self, PyObject* args, PyObject* kwargs)
{
  PyObject* file;
  if(!PyArg_ParseTuple(args, "O:FileWrapper", &file))
    return NULL;
  if(!PyFile_Check(file)) {
    TYPE_ERROR("FileWrapper argument", "file", file);
    return NULL;
  }
  Py_INCREF(file);
  FileWrapper* wrapper = PyObject_NEW(FileWrapper, &FileWrapper_Type);
  PyFile_IncUseCount((PyFileObject*)file);
  wrapper->file = file;
  return (PyObject*)wrapper;
}