def _set_ajax_widget_pins(request, widget): # Sets pinned items in a widget based a json structure # as described in ajax_widget_pins. # # Any existing pins are removed and replaced by the pins described in # the given structure. try: pin_info = json.loads(request.raw_post_data) except ValueError: logger.exception('bad json') return HttpResponse("Unable to parse json body", status=400) new_pins = [] for pi in pin_info['items']: ni = NewsItem.objects.get(id=pi['id']) new_pin = PinnedItem(news_item=ni, widget=widget, item_number=pi['index']) expiration = None if pi.get('expiration_date'): try: expiration = datetime.datetime.strptime( pi['expiration_date'], '%m/%d/%Y') except ValueError: return HttpResponse("unable to parse expiration date %s" % pi['expiration_date'], status=400) if pi.get('expiration_time', '').strip(): if expiration is None: return HttpResponse( "cannot specify expiration time without expiration date", status=400) # Be slightly broad about time formats accepted. etime = pi['expiration_time'].replace(' ', '').lower() try: if etime.endswith('am') or etime.endswith('pm'): etime = datetime.datetime.strptime(etime, '%I:%M%p') else: # Assume it's 24-hour. etime = datetime.datetime.strptime(etime, '%H:%M') except ValueError: return HttpResponse("unable to parse expiration time %s" % pi['expiration_time'], status=400) expiration = expiration.replace(hour=etime.hour, minute=etime.minute) if expiration is not None: new_pin.expiration_date = expiration new_pins.append(new_pin) # destroy current pins PinnedItem.objects.filter(widget=widget).delete() for pin in new_pins: pin.save() if len(new_pins) > 0: return HttpResponse(status=201) else: return HttpResponse(status=200)
def _set_ajax_widget_pins(request, widget): """ Sets pinned items in a widget based a json structure as described in ajax_widget_pins. Any existing pins are removed and replaced by the pins described in the given structure. """ try: pin_info = json.loads(request.raw_post_data) except: return HttpResponse("Unable to parse json body", status=400) new_pins = [] for pi in pin_info['items']: ni = NewsItem.objects.get(id=pi['id']) new_pin = PinnedItem(news_item=ni, widget=widget, item_number=pi['index']) expiration = None if pi.get('expiration_date'): try: expiration = datetime.datetime.strptime(pi['expiration_date'], '%m/%d/%Y') except: return HttpResponse("unable to parse expiration date %s" % pi['expiration_date'], status=400) if pi.get('expiration_time', '').strip(): if expiration is None: return HttpResponse("cannot specify expiration time without expiration date", status=400) # Be slightly broad about time formats accepted. etime = pi['expiration_time'].replace(' ', '').lower() try: if etime.endswith('am') or etime.endswith('pm'): etime = datetime.datetime.strptime(etime, '%I:%M%p') else: # Assume it's 24-hour. etime = datetime.datetime.strptime(etime, '%H:%M') except: return HttpResponse("unable to parse expiration time %s" % pi['expiration_time'], status=400) expiration = expiration.replace(hour=etime.hour, minute=etime.minute) if expiration is not None: new_pin.expiration_date = expiration new_pins.append(new_pin) # destroy current pins PinnedItem.objects.filter(widget=widget).delete() for pin in new_pins: pin.save() if len(new_pins) > 0: return HttpResponse(status=201) else: return HttpResponse(status=200)
def _set_ajax_widget_pins(request, widget): """ sets pinned items in a widget based a json structure as described in ajax_widget_pins. all current pins are replaced by the pins described in the given structure. """ try: pin_info = json.loads(request.raw_post_data) except: return HttpResponse("Unable to parse json body", status=400) new_pins = [] for pi in pin_info['items']: ni = NewsItem.objects.get(id=pi['id']) new_pin = PinnedItem(news_item=ni, widget=widget, item_number=pi['index']) expiration = None if 'expiration_date' in pi: try: expiration = datetime.datetime.strptime(pi['expiration_date'], '%m/%d/%Y') except: return HttResponse("unable to parse expiration date %s" % pi['expiration_date'], status=400) if 'expiration_time' in pi: if expiration is None: return HttpResponse("cannot specify expiration time without expiration date", status=400) try: etime = datetime.datetime.strptime(pi['expiration_time'], '%I:%M %p') expiration = expiration.replace(hours=etime.hours, minutes=etime.minutes) except: return HttResponse("unable to parse expiration time %s" % pi['expiration_time'], status=400) new_pin.expiration_date = expiration new_pins.append(new_pin) # destroy current pins PinnedItem.objects.filter(widget=widget).delete() for pin in new_pins: pin.save() if len(new_pins) > 0: return HttpResponse(status=201) else: return HttpResponse(status=200)