Esempio n. 1
0
static PyObject * m_timerfd_gettime(PyObject *self, PyObject *args)
{
    long fd = 0;
    int t_res;
    struct itimerspec g_time;
    PyObject* resp;

    if (!PyArg_ParseTuple(args, "l", &fd)) {
        PyErr_SetString(
            PyExc_TypeError,
            "fd is not a valid type or the argument is missing");
        return NULL;
    }

    t_res = timerfd_gettime(fd, &g_time);
    if (t_res == -1) {
        return PyErr_SetFromErrno(PyExc_IOError);
    }

    resp = PyTuple_New(2);
    if (resp == NULL) {
        /* printf("bad tuple\n"); */
        return NULL;
    }

    PyTuple_SetItem(resp, 0,
                    PyDelta_FromDSU(0, g_time.it_value.tv_sec, NANO2MICRO(g_time.it_value.tv_nsec)));
    PyTuple_SetItem(resp, 1,
                    PyDelta_FromDSU(0, g_time.it_interval.tv_sec, NANO2MICRO(g_time.it_interval.tv_nsec)));

    return resp;
}//m_timerfd_gettime()
static PyObject *PyKAdminPrincipal_get_maxlife(PyKAdminPrincipalObject *self, void *closure) {

    PyDateTime_IMPORT;

    PyObject *delta = PyDelta_FromDSU(0, self->entry.max_life, 0);
    if (!delta) { PyErr_SetString(PyExc_AttributeError, NULL); }

    return delta;
}
Esempio n. 3
0
static 
PyObject* from_second_kobject(K x){
     PyDateTime_IMPORT;
     PyObject* result;
     Py_ssize_t i, length ;
     length = (Py_ssize_t)(x->n);

     if(scalar(x)) {
	  int value = (x->i);
	  result = PyDelta_FromDSU(0, value, 0);
     }
     else {
	  result = PyList_New(length);
	  for(i = 0; i != length; ++i) {
	       int value = xI[i];
	       PyList_SetItem(result, i, PyDelta_FromDSU(0, value, 0));
	  }
     }
     return result;
}
Esempio n. 4
0
static 
PyObject* from_minute_kobject(K x){
     /* 99:10 is a valid minute object whatever that means
	likewise the parser seems to take 10000:10 */
     PyDateTime_IMPORT;
     PyObject* result;
     Py_ssize_t i, length ;
     length = (Py_ssize_t)(x->n);

     if(scalar(x)) {
	  int value = (x->i) * 60 ;
	  result = PyDelta_FromDSU(0, value, 0);
     }
     else {
	  result = PyList_New(length);
	  for(i = 0; i!= length ; ++i) {
	       int value = 60 * (xI[i]);
	       PyList_SetItem(result, i, PyDelta_FromDSU(0, value, 0)) ;
	  }
     }
     return result;
}
Esempio n. 5
0
static 
PyObject* from_timespan_kobject(K x){
     PyDateTime_IMPORT;
     PyObject* result ;
     Py_ssize_t i, length ;
     length = (Py_ssize_t)(x->n);
     int /*year, month, */ day, /*hour, minute,*/ second, usecond;

     if(scalar(x)) {
	  double value = (x->j) / 1e9;
	  timespan_helper(value, &day, &second, &usecond);
	  result = PyDelta_FromDSU(day, second, usecond) ;
     }
     else {
	  result = PyList_New(length);
	  for(i = 0; i != length; ++i) {
	       double value = xJ[i] / 1e9;
	       timespan_helper(value, &day, &second, &usecond);
	       PyList_SetItem(result, i, PyDelta_FromDSU(day, second, usecond));
	  }
     }
     return result;
}
Esempio n. 6
0
PyTypeObject *
init_fixed_offset_type(void)
{
    PyDateTime_IMPORT;

    zero_delta = PyDelta_FromDSU(0, 0, 0);
    if(! zero_delta) {
        return NULL;
    }

    FixedOffsetType.tp_base = PyDateTimeAPI->TZInfoType;
    if(PyType_Ready(&FixedOffsetType)) {
        return NULL;
    }
    return &FixedOffsetType;
}
/**
  Convert a TIME MySQL value to Python datetime.timedelta.

  Convert a TIME MySQL value to a Python datetime.timedelta returned
  as PyDelta_FromDSU object.

  @param    data        string to be converted
  @param    length      length of data

  @return   datetime.timedelta object.
    @retval PyDelta_FromDSU OK
*/
PyObject*
mytopy_time(const char *data, const unsigned long length)
{
    int hr= 0, min= 0, sec= 0, usec= 0;
    int days= 0, hours= 0, seconds= 0;
    int negative= 0;
    int value= 0;
    int parts[4]= {0};
    int part= 0;
    const char *end= data + length;

    PyDateTime_IMPORT;

    // Negative times
    if (*data == '-')
    {
        negative= 1;
        data++;
    }

    /* Parse hours, minutes and seconds */
    for (;;)
    {
        for (value= 0; data != end && isdigit(*data) ; data++)
        {
            value= (value * 10) + (unsigned int)(*data - '0');
        }
        parts[part++]= (unsigned int)value;
        if (part == 4 || (end-data) < 2 || *data != ':' || !isdigit(data[1]))
        {
            break;
        }
        data++;  // skip time separator ':'
    }

    if (data != end && end - data >= 2 && *data == '.')
    {
        // Fractional part
        int field_length= 5;
        data++;
        value= (unsigned int)(*data - '0');
        while (data++ != end && isdigit(*data))
        {
            if (field_length-- > 0)
            {
                value= (value * 10) + (unsigned int)(*data - '0');
            }
        }
        if (field_length >= 0)
        {
            while (field_length-- > 0)
            {
                value*= 10;
            }
        }
        parts[3]= value;
    }

    hr= parts[0];
    min= parts[1];
    sec= parts[2];
    usec= parts[3];

    // negative time
    if (negative) {
        hr= hr * -1;
        min= min * -1;
        sec= sec * -1;
        usec= usec * -1;
    }

    days= hr / 24;
    hours= hr % 24;

    seconds= (hours * 3600) + (min * 60) + sec;

    return PyDelta_FromDSU(days, seconds, usec);
}
Esempio n. 8
0
static PyObject *m_timerfd_settime(PyObject *self, PyObject *args, PyObject *kwargs)
{
    /* printf("m_timerfd_settime\n"); */
    /* XXX We don't accept flags at this time and we only take relatvie times.
     */

    /* char *kw[] = {"fd", "deadline", "interval", "flags", NULL}; */
    char *kw[] = {"fd", "deadline", "interval", NULL};
    long fd = 0;
    /* long  flags = 0; */
    long msec = 0; // microseconds
    int t_res;
    PyObject *deadline = NULL;
    PyObject *interval = NULL;

    struct itimerspec new_val;
    struct itimerspec old_val;
    memset(&new_val, 0, sizeof(struct itimerspec));
    memset(&old_val, 0, sizeof(struct itimerspec));

    if (!PyArg_ParseTupleAndKeywords(
                args, kwargs, "l|OO:timerfd_settime", kw,
                &fd, &deadline, &interval)) {
        return NULL;
    }
    printf("fd %ld, deadline %p interval %p\n", fd, deadline, interval);

    if (deadline != NULL) {
        /* printf("deadline is set\n"); */
        if (PyDelta_Check(deadline)) {
            /* printf("deadline is Delta\n"); */
            if(pydelta_to_timespec(deadline, &new_val.it_value) == NULL) {
                return NULL;
            }
        } else if (PyLong_Check(deadline)) {
            /* printf("deadline is long\n"); */
            msec = PyLong_AsLong(deadline);
            new_val.it_value.tv_sec = msec / MICROSEC;
            /* new_val.it_value.tv_nsec = (msec % MICROSEC) * 1000; */
            new_val.it_value.tv_nsec = MICRO2NANO(msec);
        } else {
            /* printf("deadline is UK\n"); */
            PyErr_SetString(
                PyExc_TypeError,
                "deadline is not a valid type. Must be a timedelta object or integer");
            return NULL;
        }
    }
    /* printf("deadline sec %ld nsec %ld\n", new_val.it_value.tv_sec, new_val.it_value.tv_nsec); */

    if (interval != NULL) {
        /* printf("interval is set\n"); */
        /* Py_INCREF(interval); */
        if (PyDelta_Check(interval)) {
            /* printf("interval is Delta\n"); */
            if(pydelta_to_timespec(interval, &new_val.it_interval) == NULL) {
                return NULL;
            }
        } else if (PyLong_Check(interval)) {
            /* printf("interval is long\n"); */
            msec = PyLong_AsLong(interval);
            new_val.it_interval.tv_sec = msec / MICROSEC;
            /* new_val.it_interval.tv_nsec = (msec % MICROSEC) * 1000; */
            new_val.it_interval.tv_nsec = MICRO2NANO(msec);
        } else {
            PyErr_SetString(
                PyExc_TypeError,
                "interval is not a valid type. Must be a timedelta object or integer");
            return NULL;
        }
    }
    /* printf("interval is %ld\n", msec); */
    /*     [> printf("interval sec %ld nsec %ld\n", <] */
    /*             [> new_val.it_interval.tv_sec, <] */
    /*             [> new_val.it_interval.tv_nsec); <] */

    /* printf("settime fd %ld,  new_val %p old_val %p\n", fd, &new_val, &old_val); */
    t_res = timerfd_settime(fd, 0, &new_val, &old_val);
    /* printf("timerfd_settime response %d\n", t_res); */

    if (t_res != 0) {
        /* printf("error out\n"); */
        return PyErr_SetFromErrno(PyExc_IOError);
    }

    /* printf("create tuple\n"); */
    PyObject *resp = PyTuple_New(2);
    if (resp == NULL) {
        /* printf("bad tuple\n"); */
        return NULL;
    }

    printf("settime fd %ld,  old_sec %ld old_nsec %ld\n",
           fd, old_val.it_value.tv_sec, old_val.it_value.tv_nsec);
    PyTuple_SetItem(
        resp,
        0,
        PyDelta_FromDSU(0, old_val.it_value.tv_sec,
                        NANO2MICRO(old_val.it_value.tv_nsec)));
    if (PyErr_Occurred() != NULL) {
        Py_XDECREF(resp);
        return NULL;
    }

    printf("settime fd %ld,  old_int_sec %ld old_int_nsec %ld\n",
           fd, old_val.it_interval.tv_sec, old_val.it_interval.tv_nsec);
    PyTuple_SetItem(
        resp,
        1,
        PyDelta_FromDSU(0, old_val.it_interval.tv_sec,
                        NANO2MICRO(old_val.it_interval.tv_nsec)));
    if (PyErr_Occurred() != NULL) {
        Py_XDECREF(resp);
        return NULL;
    }

    /* printf("return %p\n", resp); */
    return (PyObject *)resp;
}//m_timerfd_settime()
Esempio n. 9
0
static PyObject*
decode_datetime(JSONData *jsondata)
{

    PyObject *object;
    char c = 0;
    int n = 0;
    
    char *ptr = NULL,
         *tinfo_str = NULL;

    int year = 0,
        month = 0,
        day = 0,

        hour = 0,
        minute = 0,
        second = 0,
        usecond = 0;

    int is_tdelta = False,
        tinfo_len;

    // look for the closing quote
    ptr = jsondata->ptr + 2; // Skip the type hint and the opening quote

    while (True) {
        c = *ptr;
        if (c == 0) {
            PyErr_Format(JSON_DecodeError,
                "unterminated datetime string starting at position " SSIZE_T_F,
                (Py_ssize_t)(jsondata->ptr - jsondata->str));
            goto failure;
        }
        if (c == '"') {
            break;
        }
        if (ptr - jsondata->ptr - 2 == 0 ) { // first character
            switch (c) {
                case '-':
                case '+':
                    is_tdelta = True;
            }
        }

        ptr++;
    }

    // get only the actual datetime information
    skipSpaces(jsondata);
    tinfo_len = ptr - (jsondata->ptr + 2);
    if (tinfo_len) {
        tinfo_str = (char*) malloc(tinfo_len);
        strncpy(tinfo_str, jsondata->ptr + 2, tinfo_len);
    }

    if (is_tdelta) {
        n = sscanf(tinfo_str, "%d:%u:%u:%u.%u", &day, &hour, &minute, &second, &usecond);
        if (n != 3) {
            PyErr_Format(JSON_DecodeError, "bad timedelta format at position " SSIZE_T_F ": %s",
                (Py_ssize_t)(jsondata->ptr - jsondata->str),
                tinfo_str);
                goto failure;
        } else {
            second += minute * 60;
            second += hour * 60 * 60;
            object = PyDelta_FromDSU(day, second, usecond);
        }
    } else {
        char* is_datetime = strchr(tinfo_str, ' ');

        if (is_datetime == NULL) {
            switch (tinfo_len) {
                case 10:
                    n = sscanf(tinfo_str, "%u-%u-%u", &year, &month, &day);
                    object = PyDate_FromDate(year, month, day);
                    break;
                case 8:
                    n = sscanf(tinfo_str, "%u:%u:%u", &hour, &minute, &second);
                    object = PyTime_FromTime(hour, minute, second, 0);
                    break;
                case 15:
                    n = sscanf(tinfo_str, "%u:%u:%u.%u", &hour, &minute, &second, &usecond);
                    object = PyTime_FromTime(hour, minute, second, usecond);
                    break;
            }
        } else {
            switch (tinfo_len) {
                case 19:
                    n = sscanf(tinfo_str, "%u-%u-%u %u:%u:%u", &year, &month, &day, &hour, &minute, &second);
                    object = PyDateTime_FromDateAndTime(year, month, day, hour, minute, second, 0);
                    break;
                case 26:
                    n = sscanf(tinfo_str, "%u-%u-%u %u:%u:%u.%u", &year, &month, &day, &hour, &minute, &second, &usecond);
                    object = PyDateTime_FromDateAndTime(year, month, day, hour, minute, second, usecond);
                    break;
            }
        }
    }

    if (object == NULL) {
        PyErr_Format(JSON_DecodeError, "bad format for time, date, or datetime at position " SSIZE_T_F ": %s",
            (Py_ssize_t)(jsondata->ptr - jsondata->str),
            tinfo_str);
        goto failure;
    }

    jsondata->ptr = jsondata->ptr + tinfo_len + 3;

    return object;

failure:
    free(tinfo_str);
    Py_XDECREF(object);
    return NULL;

}
Esempio n. 10
0
static PyObject *
fixedoffset_utcoffset(FixedOffset *self, PyObject *args)
{
    return PyDelta_FromDSU(0, self->offset_secs, 0);
}
Esempio n. 11
0
/*
 * def dst(self, dt):
 *     return timedelta(seconds=self.offset * 60)
 */
static PyObject *FixedOffset_dst(FixedOffset *self, PyObject *args) {
    return PyDelta_FromDSU(0, self->offset, 0);
}
Esempio n. 12
0
PyObject* PyDeltaFromMIInterval(const MI_Interval& interval)
{
    return PyDelta_FromDSU(interval.days, interval.hours * 3600 + interval.minutes * 60 + interval.seconds, interval.microseconds);
}