def test_paste_to_for_cut_different_sheet(self):
        self.user = User()
        self.user.save()

        c2 = Cell()
        c2.formula = 'foo'
        c2.formatted_value = 'fv'
        d2 = Cell()
        d2.formula = 'fv to become formula'
        d2.formatted_value = d2.formula
        c3 = Cell()
        d3 = Cell()
        c5 = Cell()
        c5.formula = 'a safe source cell'
        dest_cells = {
            (3, 4): c2,
            (3, 5): c3,
            (4, 4): d2,
            (4, 5): d3,
        }

        source_sheet = Sheet()
        source_sheet.owner = self.user
        source_sheet.save()

        clipboard = Clipboard()
        clipboard.to_cells = Mock()
        clipboard.to_cells.return_value = dest_cells.iteritems()
        clipboard.is_cut = True
        clipboard.source_sheet = source_sheet
        clipboard.source_left = 3
        clipboard.source_top = 2
        clipboard.source_right = 4
        clipboard.source_bottom = 3

        destination_sheet = Sheet()
        destination_sheet.owner = self.user
        destination_worksheet = Worksheet()
        destination_worksheet.C4.formula = 'i am in danger!'
        destination_worksheet.A1.formula = 'i am safe :-)'
        destination_sheet.jsonify_worksheet(destination_worksheet)
        destination_sheet.save()

        clipboard.paste_to(destination_sheet, (3, 4), (3, 4))

        updated_worksheet = destination_sheet.unjsonify_worksheet()
        self.assertEquals(updated_worksheet.A1.formula, 'i am safe :-)')
        self.assertEquals(updated_worksheet.C4.formula, c2.formula)
        self.assertEquals(updated_worksheet.D4.formula, d2.formula)
        self.assertEquals(updated_worksheet.C5.formula, c3.formula)
        self.assertEquals(updated_worksheet.d5.formula, d3.formula)

        # paste should reset the clipboard so that future pastes act as
        # though they came from a copy
        self.assertEquals(clipboard.source_left, 3)
        self.assertEquals(clipboard.source_top, 4)
        self.assertEquals(clipboard.source_right, 4)
        self.assertEquals(clipboard.source_bottom, 5)
        self.assertEquals(clipboard.is_cut, False)
        self.assertEquals(clipboard.source_sheet, None)
    def test_cut_calls_copy_then_cuts_and_remembers_some_stuff(self):
        clipboard = Clipboard()
        sheet = Sheet()
        user = User()
        user.username = '******'
        user.save()
        sheet.owner = user
        clipboard.copy = Mock(wraps=clipboard.copy)

        worksheet = Worksheet()
        worksheet.A1.formula = 'outside'
        worksheet.A2.formula = 'inside'
        sheet.jsonify_worksheet(worksheet)
        sheet.save()

        clipboard.cut(sheet, (1, 2), (3, 4))

        self.assertCalledOnce(clipboard.copy, sheet, (1, 2), (3, 4))

        worksheet = sheet.unjsonify_worksheet()

        self.assertEquals(worksheet.A1.formula, 'outside')
        self.assertEquals(worksheet.A2, Cell())

        self.assertEquals(clipboard.source_left, 1)
        self.assertEquals(clipboard.source_top, 2)
        self.assertEquals(clipboard.source_right, 3)
        self.assertEquals(clipboard.source_bottom, 4)

        self.assertEquals(clipboard.is_cut, True)
        self.assertEquals(clipboard.source_sheet, sheet)
 def test_unicode(self):
     user = User(username='******')
     user.save()
     sheet = Sheet(owner=user, name='the new sheet name')
     sheet.save()
     self.assertEquals(unicode(sheet),
                       'Sheet %d: %s' % (sheet.id, sheet.name))
 def test_sheet_name_not_set_on_save_if_name_is_not_default(self):
     user = User(username='******')
     user.save()
     sheet = Sheet(owner=user)
     sheet.name = 'new sheet name'
     sheet.save()
     self.assertEquals(sheet.name, 'new sheet name')
    def test_paste_to_for_cut_different_sheet(self):
        self.user = User()
        self.user.save()

        c2 = Cell()
        c2.formula = 'foo'
        c2.formatted_value = 'fv'
        d2 = Cell()
        d2.formula = 'fv to become formula'
        d2.formatted_value = d2.formula
        c3 = Cell()
        d3 = Cell()
        c5 = Cell()
        c5.formula = 'a safe source cell'
        dest_cells = {
            (3, 4): c2,
            (3, 5): c3,
            (4, 4): d2,
            (4, 5): d3,
        }

        source_sheet = Sheet()
        source_sheet.owner = self.user
        source_sheet.save()

        clipboard = Clipboard()
        clipboard.to_cells = Mock()
        clipboard.to_cells.return_value = dest_cells.iteritems()
        clipboard.is_cut = True
        clipboard.source_sheet = source_sheet
        clipboard.source_left = 3
        clipboard.source_top = 2
        clipboard.source_right = 4
        clipboard.source_bottom = 3

        destination_sheet = Sheet()
        destination_sheet.owner = self.user
        destination_worksheet = Worksheet()
        destination_worksheet.C4.formula = 'i am in danger!'
        destination_worksheet.A1.formula = 'i am safe :-)'
        destination_sheet.jsonify_worksheet(destination_worksheet)
        destination_sheet.save()

        clipboard.paste_to(destination_sheet, (3, 4), (3, 4))

        updated_worksheet = destination_sheet.unjsonify_worksheet()
        self.assertEquals(updated_worksheet.A1.formula, 'i am safe :-)')
        self.assertEquals(updated_worksheet.C4.formula, c2.formula)
        self.assertEquals(updated_worksheet.D4.formula, d2.formula)
        self.assertEquals(updated_worksheet.C5.formula, c3.formula)
        self.assertEquals(updated_worksheet.d5.formula, d3.formula)

        # paste should reset the clipboard so that future pastes act as
        # though they came from a copy
        self.assertEquals(clipboard.source_left, 3)
        self.assertEquals(clipboard.source_top, 4)
        self.assertEquals(clipboard.source_right, 4)
        self.assertEquals(clipboard.source_bottom, 5)
        self.assertEquals(clipboard.is_cut, False)
        self.assertEquals(clipboard.source_sheet, None)
    def test_cut_calls_copy_then_cuts_and_remembers_some_stuff(self):
        clipboard = Clipboard()
        sheet = Sheet()
        user = User()
        user.username = '******'
        user.save()
        sheet.owner = user
        clipboard.copy = Mock(wraps=clipboard.copy)

        worksheet = Worksheet()
        worksheet.A1.formula = 'outside'
        worksheet.A2.formula = 'inside'
        sheet.jsonify_worksheet(worksheet)
        sheet.save()

        clipboard.cut(sheet, (1, 2), (3, 4))

        self.assertCalledOnce(clipboard.copy, sheet, (1, 2), (3, 4))

        worksheet = sheet.unjsonify_worksheet()

        self.assertEquals(worksheet.A1.formula, 'outside')
        self.assertEquals(worksheet.A2, Cell())

        self.assertEquals(clipboard.source_left, 1)
        self.assertEquals(clipboard.source_top, 2)
        self.assertEquals(clipboard.source_right, 3)
        self.assertEquals(clipboard.source_bottom, 4)

        self.assertEquals(clipboard.is_cut, True)
        self.assertEquals(clipboard.source_sheet, sheet)
 def test_sheet_name_not_set_on_save_if_name_is_not_default(self):
     user = User(username='******')
     user.save()
     sheet = Sheet(owner=user)
     sheet.name = 'new sheet name'
     sheet.save()
     self.assertEquals(sheet.name, 'new sheet name')
Beispiel #8
0
def import_xls(request, username):
    if request.user.username != username:
        return HttpResponseForbidden(render_to_string("403.html"))

    handle, filename = mkstemp()
    try:
        os.write(handle, request.FILES['file'].read())
        wb = xlrd.open_workbook(filename)
        for xl_sheet in wb.sheets():
            if xl_sheet.nrows > 0 and xl_sheet.ncols > 0:
                name = '%s - %s' % (
                    splitext(request.FILES['file'].name)[0],
                    xl_sheet.name
                )
                sheet = Sheet(owner=request.user, name=name)
                sheet.jsonify_worksheet(worksheet_from_excel(xl_sheet))
                sheet.save()

                try:
                    calculate(request, sheet.owner.username, sheet.id)
                except:
                    pass

    except Exception:
        return render_to_response(
            'import_xls_error.html',
            {},
            context_instance=RequestContext(request)
        )
    finally:
        os.close(handle)
        os.unlink(filename)
    return HttpResponseRedirect('/')
 def test_uuid_stays_constant_between_reads(self):
     sheet = Sheet()
     user = User(username='******')
     user.save()
     sheet.owner = user
     sheet.save()
     sheet2 = Sheet.objects.get(pk=sheet.id)
     self.assertEquals(sheet.api_key, sheet2.api_key)
 def test_uuid_stays_constant_between_reads(self):
     sheet = Sheet()
     user = User(username='******')
     user.save()
     sheet.owner = user
     sheet.save()
     sheet2 = Sheet.objects.get(pk=sheet.id)
     self.assertEquals(sheet.api_key, sheet2.api_key)
Beispiel #11
0
def new_sheet(request):
    sheet = Sheet(owner=request.user)
    sheet.save()
    # need response redirect in order to reset url
    return HttpResponseRedirect(reverse('sheet_page', kwargs={
            'username' : request.user.username,
            'sheet_id' : sheet.id
    }))
    def test_unicode(self):
        user = User(username='******')
        user.save()
        sheet = Sheet(owner=user, name='sheet to feature')
        sheet.save()

        description = 'twas brillig and the slithy toves'
        more_info_url = 'http://far.away/'
        fs = FeaturedSheet(sheet=sheet, description=description, more_info_url=more_info_url)
        fs.save()

        self.assertEquals(unicode(fs), u'Feature: %s' % (sheet.name,))
Beispiel #13
0
    def test_can_construct_without_more_info_url(self):
        user = User(username='******')
        user.save()
        sheet = Sheet(owner=user, name='sheet to feature')
        sheet.save()

        description = 'twas brillig and the slithy toves'
        fs = FeaturedSheet(sheet=sheet, description=description)
        fs.save()

        self.assertEquals(fs.sheet, sheet)
        self.assertEquals(fs.description, description)
        self.assertEquals(fs.more_info_url, '')
    def test_can_construct_without_more_info_url(self):
        user = User(username='******')
        user.save()
        sheet = Sheet(owner=user, name='sheet to feature')
        sheet.save()

        description = 'twas brillig and the slithy toves'
        fs = FeaturedSheet(sheet=sheet, description=description)
        fs.save()

        self.assertEquals(fs.sheet, sheet)
        self.assertEquals(fs.description, description)
        self.assertEquals(fs.more_info_url, '')
    def test_can_construct_with_more_info_url(self):
        user = User(username='******')
        user.save()
        sheet = Sheet(owner=user, name='sheet to feature')
        sheet.save()

        description = 'twas brillig and the slithy toves'
        more_info_url = 'http://far.away/'
        fs = FeaturedSheet(sheet=sheet, description=description, more_info_url=more_info_url)
        fs.save()

        self.assertEquals(fs.sheet, sheet)
        self.assertEquals(fs.description, description)
        self.assertEquals(fs.more_info_url, more_info_url)
Beispiel #16
0
    def test_unicode(self):
        user = User(username='******')
        user.save()
        sheet = Sheet(owner=user, name='sheet to feature')
        sheet.save()

        description = 'twas brillig and the slithy toves'
        more_info_url = 'http://far.away/'
        fs = FeaturedSheet(sheet=sheet,
                           description=description,
                           more_info_url=more_info_url)
        fs.save()

        self.assertEquals(unicode(fs), u'Feature: %s' % (sheet.name, ))
Beispiel #17
0
    def test_can_construct_with_more_info_url(self):
        user = User(username='******')
        user.save()
        sheet = Sheet(owner=user, name='sheet to feature')
        sheet.save()

        description = 'twas brillig and the slithy toves'
        more_info_url = 'http://far.away/'
        fs = FeaturedSheet(sheet=sheet,
                           description=description,
                           more_info_url=more_info_url)
        fs.save()

        self.assertEquals(fs.sheet, sheet)
        self.assertEquals(fs.description, description)
        self.assertEquals(fs.more_info_url, more_info_url)
    def test_roundtrip_column_widths_to_db(self, mock_jsonlib):
        COLUMN_WIDTHS = {'1': 11, '2': 22, '3': 33}
        mock_jsonlib.loads.return_value = COLUMN_WIDTHS
        mock_jsonlib.dumps.return_value = sentinel.json
        user = User(username='******')
        user.save()
        sheet = Sheet(owner=user)
        DEFAULT_COLUMN_WIDTHS_JSON = '{}'
        self.assertEquals(mock_jsonlib.loads.call_args,
                          ((DEFAULT_COLUMN_WIDTHS_JSON, ), {}))
        sheet.column_widths = COLUMN_WIDTHS

        sheet.save()
        self.assertEqual(mock_jsonlib.dumps.call_args, ((COLUMN_WIDTHS, ), {}))
        pk = sheet.id

        sheet2 = Sheet.objects.get(pk=pk)
        self.assertEquals(sheet2.column_widths, COLUMN_WIDTHS)
    def test_roundtrip_column_widths_to_db(self, mock_jsonlib):
        COLUMN_WIDTHS = {'1': 11, '2': 22, '3': 33}
        mock_jsonlib.loads.return_value = COLUMN_WIDTHS
        mock_jsonlib.dumps.return_value = sentinel.json
        user = User(username='******')
        user.save()
        sheet = Sheet(owner=user)
        DEFAULT_COLUMN_WIDTHS_JSON = '{}'
        self.assertEquals(
            mock_jsonlib.loads.call_args,
            ((DEFAULT_COLUMN_WIDTHS_JSON,), {})
        )
        sheet.column_widths = COLUMN_WIDTHS

        sheet.save()
        self.assertEqual(
            mock_jsonlib.dumps.call_args,
            ((COLUMN_WIDTHS,), {})
        )
        pk = sheet.id

        sheet2 = Sheet.objects.get(pk=pk)
        self.assertEquals(sheet2.column_widths, COLUMN_WIDTHS)
    def test_copy_sheet_allows_other_users_to_copy_public_sheets(self):
        user = User(username='******')
        user.save()
        worksheet = Worksheet()
        worksheet.a1.value = 'some-cell-content'
        sheet = Sheet()
        sheet.owner = user
        sheet.is_public = True
        sheet.jsonify_worksheet(worksheet)
        sheet.save()
        original_sheet_id = sheet.id
        other_user = User(username='******')
        other_user.save()

        retval = copy_sheet_to_user(sheet, other_user)

        other_user_sheets = Sheet.objects.filter(owner=other_user)
        self.assertEquals(len(other_user_sheets), 1)
        copied_sheet = other_user_sheets[0]
        self.assertFalse(copied_sheet.is_public)
        copied_worksheet = copied_sheet.unjsonify_worksheet()
        self.assertEquals(copied_worksheet.a1.value, 'some-cell-content')
        self.assertEquals(copied_sheet.id, retval.id)
        self.assertNotEquals(retval.id, original_sheet_id)
    def test_copy_sheet_allows_other_users_to_copy_public_sheets(self):
        user = User(username='******')
        user.save()
        worksheet = Worksheet()
        worksheet.a1.value = 'some-cell-content'
        sheet = Sheet()
        sheet.owner = user
        sheet.is_public = True
        sheet.jsonify_worksheet(worksheet)
        sheet.save()
        original_sheet_id = sheet.id
        other_user = User(username='******')
        other_user.save()

        retval = copy_sheet_to_user(sheet, other_user)

        other_user_sheets = Sheet.objects.filter(owner=other_user)
        self.assertEquals(len(other_user_sheets), 1)
        copied_sheet = other_user_sheets[0]
        self.assertFalse(copied_sheet.is_public)
        copied_worksheet = copied_sheet.unjsonify_worksheet()
        self.assertEquals(copied_worksheet.a1.value, 'some-cell-content')
        self.assertEquals(copied_sheet.id, retval.id)
        self.assertNotEquals(retval.id, original_sheet_id)
 def test_unicode(self):
     user = User(username='******')
     user.save()
     sheet = Sheet(owner=user, name='the new sheet name')
     sheet.save()
     self.assertEquals(unicode(sheet), 'Sheet %d: %s' % (sheet.id, sheet.name))
 def test_sheet_name_set_on_save_if_name_is_default(self):
     user = User(username='******')
     user.save()
     sheet = Sheet(owner=user)
     sheet.save()
     self.assertEquals(sheet.name, 'Sheet %d' % (sheet.id,))
 def test_sheet_name_set_on_save_if_name_is_default(self):
     user = User(username='******')
     user.save()
     sheet = Sheet(owner=user)
     sheet.save()
     self.assertEquals(sheet.name, 'Sheet %d' % (sheet.id, ))