Beispiel #1
0
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)
Beispiel #3
0
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)