I am using piston to write a JSON api for an application I am writing which handles recurring calendar events.
My API was working for regular events, when I attempted to add logic to handle the recurrence, I started getting the following error:
descriptor 'date' requires a 'datetime.datetime' object but received a 'unicode'
Here is my handlers.py:
from piston.handler import BaseHandler
from lessons.models import NewEvent, EachEvent
import calendar
from datetime import datetime, timedelta
class CalendarHandler(BaseHandler):
allowed_methods = ('GET',)
model = EachEvent
fields = ('actualDate', ('manager', ('firstName', 'lastName')))
def next_date(startDate, recurrence, rangeStart):
sd = startDate
while (sd < rangeStart):
print sd;
sd += datetime.timedelta(recurrence)
return sd
def read(self, request, uid, month, year):
qs = NewEvent.objects.filter(manager__boss = request.user).filter(endDate__gte=datetime.date(year, month, 1)).filter(startDate__lte=datetime.date(year, month, calendar.mdays[month]))
lessonList = []
qsList = list(qs)
for l in qsList:
if l.frequency == 0:
x = EachLesson()
x.lessonID = l.id
x.actualDate = l.startDate
x.manager = l.manager
lessonList.append(x)
else:
sd = next_date(l.startDate, l.frequency, datetime.date(year, month, 1))
while (sd <= datetime.date(year, month, calendar.mdays[month])):
x = EachLesson()
x.lessonID = l.id
x.actualDate = sd
x.manager = l.manager
lessonList.append(x)
sd += datetime.timedelta(recurrence)
return lessonList
frequency is an IntegerField, actualDate, startDate, and endDate are all DateField.
My URLconf accepts a uid, year, and month, all of which are passed as parameters to the CalendarHandler.read method.
By using from datetime import datetime, timedelta you have imported the datetime type from the datetime module. Thus when you call datetime.date you are calling a method on the datetime type.
I think what you want is to use the date type from the datetime module:
from datetime import datetime, timedelta, date.date(year, month, 1) instead of datetime.date(year, month, 1).If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With