Example #1
0
 def test_cell_ref_as_string_to_coordinates(self):
     self.assertEquals(cell_ref_as_string_to_coordinates('1, 2'), (1, 2))
     self.assertEquals(cell_ref_as_string_to_coordinates(' 10 , 2'), (10, 2))
     self.assertEquals(cell_ref_as_string_to_coordinates('(1, 2)'), (1, 2))
     self.assertEquals(cell_ref_as_string_to_coordinates(' (10 , 2)'), (10, 2))
     self.assertEquals(cell_ref_as_string_to_coordinates('J11'), (10, 11))
     self.assertIsNone(cell_ref_as_string_to_coordinates('J, 11'))
     self.assertIsNone(cell_ref_as_string_to_coordinates('blurgle'))
def calculate_and_get_json_for_api(request, username, sheet_id):
    sheet = get_object_or_404(Sheet, pk=sheet_id, owner__username=username)
    pads = None

    if request.method == 'POST':
        params = request.POST
    else:
        params = request.GET

    if 'api_key' in params:
        if not sheet.allow_json_api_access:
            return HttpResponseForbidden()
        elif params['api_key'] != sheet.api_key:
            return HttpResponseForbidden()
    elif 'dirigible_l337_private_key' in params:
        pads = OneTimePad.objects.filter(
                user=sheet.owner,
                guid=params['dirigible_l337_private_key'])
        too_old = datetime.now() - timedelta(36000)
        if len(pads) != 1 or pads[0].creation_time < too_old:
            return HttpResponseForbidden()
    else:
        return HttpResponseForbidden()

    worksheet = sheet.unjsonify_worksheet()
    for encoded_loc, new_formula in params.items():
        colrow = cell_ref_as_string_to_coordinates(encoded_loc)
        if colrow is not None:
            col, row = colrow
            worksheet.set_cell_formula(col, row, new_formula)
    sheet.jsonify_worksheet(worksheet)

    try:
        sheet.calculate()
        worksheet = sheet.unjsonify_worksheet()
        if worksheet._usercode_error:
            return HttpResponse(json.dumps({
                "usercode_error" : {
                    "message" : worksheet._usercode_error["message"],
                    "line" : str(worksheet._usercode_error["line"])
                }
            }))
        response = HttpResponse(
            _sheet_to_value_only_json(sheet.name, worksheet))
        response['Access-Control-Allow-Origin'] = '*'
        return response
    except (Exception, HTTPError), e:
        return HttpResponse(str(e))
def calculate_and_get_json_for_api(request, username, sheet_id):
    sheet = get_object_or_404(Sheet, pk=sheet_id, owner__username=username)
    pads = None

    if request.method == 'POST':
        params = request.POST
    else:
        params = request.GET

    if 'api_key' in params:
        if not sheet.allow_json_api_access:
            return HttpResponseForbidden()
        elif params['api_key'] != sheet.api_key:
            return HttpResponseForbidden()
    elif 'dirigible_l337_private_key' in params:
        pads = OneTimePad.objects.filter(
            user=sheet.owner, guid=params['dirigible_l337_private_key'])
        too_old = datetime.now() - timedelta(36000)
        if len(pads) != 1 or pads[0].creation_time < too_old:
            return HttpResponseForbidden()
    else:
        return HttpResponseForbidden()

    worksheet = sheet.unjsonify_worksheet()
    for encoded_loc, new_formula in params.items():
        colrow = cell_ref_as_string_to_coordinates(encoded_loc)
        if colrow is not None:
            col, row = colrow
            worksheet.set_cell_formula(col, row, new_formula)
    sheet.jsonify_worksheet(worksheet)

    try:
        sheet.calculate()
        worksheet = sheet.unjsonify_worksheet()
        if worksheet._usercode_error:
            return HttpResponse(
                json.dumps({
                    "usercode_error": {
                        "message": worksheet._usercode_error["message"],
                        "line": str(worksheet._usercode_error["line"])
                    }
                }))
        response = HttpResponse(
            _sheet_to_value_only_json(sheet.name, worksheet))
        response['Access-Control-Allow-Origin'] = '*'
        return response
    except (Exception, HTTPError), e:
        return HttpResponse(str(e))