🔨 black and isort now rules the coding style
This commit is contained in:
parent
aa7222de61
commit
6af34ace26
|
@ -1,4 +1,4 @@
|
|||
{% extends 'tests/base.py.jj2' %}
|
||||
|
||||
{%block ods_types%}
|
||||
{%endblock%}
|
||||
{%endblock%}
|
||||
|
|
|
@ -11,17 +11,21 @@
|
|||
# this line has to be place above all else
|
||||
# because of dynamic import
|
||||
from pyexcel_io.plugins import IOPluginInfoChain
|
||||
from pyexcel_io.io import get_data as read_data, isstream, save_data as write_data
|
||||
from pyexcel_io.io import (
|
||||
get_data as read_data,
|
||||
isstream,
|
||||
save_data as write_data,
|
||||
)
|
||||
|
||||
__FILE_TYPE__ = 'xls'
|
||||
__FILE_TYPE__ = "xls"
|
||||
IOPluginInfoChain(__name__).add_a_reader(
|
||||
relative_plugin_class_path='xlsr.XLSBook',
|
||||
file_types=[__FILE_TYPE__, 'xlsx', 'xlsm'],
|
||||
stream_type='binary'
|
||||
relative_plugin_class_path="xlsr.XLSBook",
|
||||
file_types=[__FILE_TYPE__, "xlsx", "xlsm"],
|
||||
stream_type="binary",
|
||||
).add_a_writer(
|
||||
relative_plugin_class_path='xlsw.XLSWriter',
|
||||
relative_plugin_class_path="xlsw.XLSWriter",
|
||||
file_types=[__FILE_TYPE__],
|
||||
stream_type='binary'
|
||||
stream_type="binary",
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -8,20 +8,26 @@
|
|||
:license: New BSD License
|
||||
"""
|
||||
import datetime
|
||||
|
||||
import xlrd
|
||||
|
||||
from pyexcel_io.book import BookReader
|
||||
from pyexcel_io.sheet import SheetReader
|
||||
from pyexcel_io._compact import OrderedDict, irange
|
||||
from pyexcel_io.service import has_no_digits_in_float
|
||||
|
||||
from pyexcel_io._compact import OrderedDict, irange
|
||||
|
||||
XLS_KEYWORDS = [
|
||||
'filename', 'logfile', 'verbosity', 'use_mmap',
|
||||
'file_contents', 'encoding_override', 'formatting_info',
|
||||
'on_demand', 'ragged_rows'
|
||||
"filename",
|
||||
"logfile",
|
||||
"verbosity",
|
||||
"use_mmap",
|
||||
"file_contents",
|
||||
"encoding_override",
|
||||
"formatting_info",
|
||||
"on_demand",
|
||||
"ragged_rows",
|
||||
]
|
||||
DEFAULT_ERROR_VALUE = '#N/A'
|
||||
DEFAULT_ERROR_VALUE = "#N/A"
|
||||
|
||||
|
||||
class MergedCell(object):
|
||||
|
@ -45,6 +51,7 @@ class XLSheet(SheetReader):
|
|||
|
||||
Currently only support first sheet in the file
|
||||
"""
|
||||
|
||||
def __init__(self, sheet, auto_detect_int=True, date_mode=0, **keywords):
|
||||
SheetReader.__init__(self, sheet, **keywords)
|
||||
self.__auto_detect_int = auto_detect_int
|
||||
|
@ -52,11 +59,11 @@ class XLSheet(SheetReader):
|
|||
self.__hidden_rows = []
|
||||
self.__merged_cells = {}
|
||||
self._book_date_mode = date_mode
|
||||
if keywords.get('detect_merged_cells') is True:
|
||||
if keywords.get("detect_merged_cells") is True:
|
||||
for merged_cell_ranges in sheet.merged_cells:
|
||||
merged_cells = MergedCell(*merged_cell_ranges)
|
||||
merged_cells.register_cells(self.__merged_cells)
|
||||
if keywords.get('skip_hidden_row_and_column') is True:
|
||||
if keywords.get("skip_hidden_row_and_column") is True:
|
||||
for col_index, info in self._native_sheet.colinfo_map.items():
|
||||
if info.hidden == 1:
|
||||
self.__hidden_cols.append(col_index)
|
||||
|
@ -84,7 +91,7 @@ class XLSheet(SheetReader):
|
|||
"""
|
||||
Random access to the xls cells
|
||||
"""
|
||||
if self._keywords.get('skip_hidden_row_and_column') is True:
|
||||
if self._keywords.get("skip_hidden_row_and_column") is True:
|
||||
row, column = self._offset_hidden_indices(row, column)
|
||||
cell_type = self._native_sheet.cell_type(row, column)
|
||||
value = self._native_sheet.cell_value(row, column)
|
||||
|
@ -126,6 +133,7 @@ class XLSBook(BookReader):
|
|||
|
||||
It reads xls, xlsm, xlsx work book
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
BookReader.__init__(self)
|
||||
self._file_content = None
|
||||
|
@ -147,10 +155,11 @@ class XLSBook(BookReader):
|
|||
self._file_content = file_content
|
||||
|
||||
def __parse_keywords(self, **keywords):
|
||||
self.__skip_hidden_sheets = keywords.get('skip_hidden_sheets', True)
|
||||
self.__skip_hidden_sheets = keywords.get("skip_hidden_sheets", True)
|
||||
self.__skip_hidden_row_column = keywords.get(
|
||||
'skip_hidden_row_and_column', True)
|
||||
self.__detect_merged_cells = keywords.get('detect_merged_cells', False)
|
||||
"skip_hidden_row_and_column", True
|
||||
)
|
||||
self.__detect_merged_cells = keywords.get("detect_merged_cells", False)
|
||||
|
||||
def close(self):
|
||||
if self._native_book:
|
||||
|
@ -181,27 +190,30 @@ class XLSBook(BookReader):
|
|||
return result
|
||||
|
||||
def read_sheet(self, native_sheet):
|
||||
sheet = XLSheet(native_sheet, date_mode=self._native_book.datemode,
|
||||
**self._keywords)
|
||||
sheet = XLSheet(
|
||||
native_sheet,
|
||||
date_mode=self._native_book.datemode,
|
||||
**self._keywords
|
||||
)
|
||||
return {sheet.name: sheet.to_array()}
|
||||
|
||||
def _get_book(self, on_demand=False):
|
||||
xlrd_params = self._extract_xlrd_params()
|
||||
xlrd_params['on_demand'] = on_demand
|
||||
xlrd_params["on_demand"] = on_demand
|
||||
|
||||
if self._file_name:
|
||||
xlrd_params['filename'] = self._file_name
|
||||
xlrd_params["filename"] = self._file_name
|
||||
elif self._file_stream:
|
||||
file_content = self._file_stream.read()
|
||||
xlrd_params['file_contents'] = file_content
|
||||
xlrd_params["file_contents"] = file_content
|
||||
elif self._file_content is not None:
|
||||
xlrd_params['file_contents'] = self._file_content
|
||||
xlrd_params["file_contents"] = self._file_content
|
||||
else:
|
||||
raise IOError("No valid file name or file content found.")
|
||||
if self.__skip_hidden_row_column and self._file_type == 'xls':
|
||||
xlrd_params['formatting_info'] = True
|
||||
if self.__skip_hidden_row_column and self._file_type == "xls":
|
||||
xlrd_params["formatting_info"] = True
|
||||
if self.__detect_merged_cells:
|
||||
xlrd_params['formatting_info'] = True
|
||||
xlrd_params["formatting_info"] = True
|
||||
xls_book = xlrd.open_workbook(**xlrd_params)
|
||||
return xls_book
|
||||
|
||||
|
@ -224,13 +236,9 @@ def xldate_to_python_date(value, date_mode):
|
|||
if date_tuple == (0, 0, 0, 0, 0, 0):
|
||||
ret = datetime.datetime(1900, 1, 1, 0, 0, 0)
|
||||
elif date_tuple[0:3] == (0, 0, 0):
|
||||
ret = datetime.time(date_tuple[3],
|
||||
date_tuple[4],
|
||||
date_tuple[5])
|
||||
ret = datetime.time(date_tuple[3], date_tuple[4], date_tuple[5])
|
||||
elif date_tuple[3:6] == (0, 0, 0):
|
||||
ret = datetime.date(date_tuple[0],
|
||||
date_tuple[1],
|
||||
date_tuple[2])
|
||||
ret = datetime.date(date_tuple[0], date_tuple[1], date_tuple[2])
|
||||
else:
|
||||
ret = datetime.datetime(
|
||||
date_tuple[0],
|
||||
|
@ -238,6 +246,6 @@ def xldate_to_python_date(value, date_mode):
|
|||
date_tuple[2],
|
||||
date_tuple[3],
|
||||
date_tuple[4],
|
||||
date_tuple[5]
|
||||
date_tuple[5],
|
||||
)
|
||||
return ret
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
:license: New BSD License
|
||||
"""
|
||||
import datetime
|
||||
|
||||
import xlrd
|
||||
from xlwt import Workbook, XFStyle
|
||||
from xlwt import XFStyle, Workbook
|
||||
|
||||
from pyexcel_io.book import BookWriter
|
||||
from pyexcel_io.sheet import SheetWriter
|
||||
|
||||
|
||||
DEFAULT_DATE_FORMAT = "DD/MM/YY"
|
||||
DEFAULT_TIME_FORMAT = "HH:MM:SS"
|
||||
DEFAULT_DATETIME_FORMAT = "%s %s" % (DEFAULT_DATE_FORMAT, DEFAULT_TIME_FORMAT)
|
||||
|
@ -25,6 +25,7 @@ class XLSheetWriter(SheetWriter):
|
|||
"""
|
||||
xls sheet writer
|
||||
"""
|
||||
|
||||
def set_sheet_name(self, name):
|
||||
"""Create a sheet
|
||||
"""
|
||||
|
@ -40,8 +41,12 @@ class XLSheetWriter(SheetWriter):
|
|||
tmp_array = []
|
||||
if isinstance(value, datetime.datetime):
|
||||
tmp_array = [
|
||||
value.year, value.month, value.day,
|
||||
value.hour, value.minute, value.second
|
||||
value.year,
|
||||
value.month,
|
||||
value.day,
|
||||
value.hour,
|
||||
value.minute,
|
||||
value.second,
|
||||
]
|
||||
value = xlrd.xldate.xldate_from_datetime_tuple(tmp_array, 0)
|
||||
style = XFStyle()
|
||||
|
@ -67,15 +72,18 @@ class XLSWriter(BookWriter):
|
|||
"""
|
||||
xls writer
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
BookWriter.__init__(self)
|
||||
self.work_book = None
|
||||
|
||||
def open(self, file_name,
|
||||
encoding='ascii', style_compression=2, **keywords):
|
||||
def open(
|
||||
self, file_name, encoding="ascii", style_compression=2, **keywords
|
||||
):
|
||||
BookWriter.open(self, file_name, **keywords)
|
||||
self.work_book = Workbook(style_compression=style_compression,
|
||||
encoding=encoding)
|
||||
self.work_book = Workbook(
|
||||
style_compression=style_compression, encoding=encoding
|
||||
)
|
||||
|
||||
def write(self, incoming_dict):
|
||||
if incoming_dict:
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# flake8: noqa
|
||||
import sys
|
||||
|
||||
|
||||
if sys.version_info[0] == 2 and sys.version_info[1] < 7:
|
||||
from ordereddict import OrderedDict
|
||||
else:
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
import os # noqa
|
||||
import pyexcel
|
||||
import datetime # noqa
|
||||
from nose.tools import raises, eq_ # noqa
|
||||
|
||||
import pyexcel
|
||||
|
||||
from nose.tools import eq_, raises # noqa
|
||||
|
||||
|
||||
def create_sample_file1(file):
|
||||
data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 1.1, 1]
|
||||
data = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", 1.1, 1]
|
||||
table = []
|
||||
table.append(data[:4])
|
||||
table.append(data[4:8])
|
||||
|
@ -17,10 +19,11 @@ class PyexcelHatWriterBase:
|
|||
"""
|
||||
Abstract functional test for hat writers
|
||||
"""
|
||||
|
||||
content = {
|
||||
"X": [1, 2, 3, 4, 5],
|
||||
"Y": [6, 7, 8, 9, 10],
|
||||
"Z": [11, 12, 13, 14, 15]
|
||||
"Z": [11, 12, 13, 14, 15],
|
||||
}
|
||||
|
||||
def test_series_table(self):
|
||||
|
@ -36,11 +39,12 @@ class PyexcelWriterBase:
|
|||
testfile and testfile2 have to be initialized before
|
||||
it is used for testing
|
||||
"""
|
||||
|
||||
content = [
|
||||
[1, 2, 3, 4, 5],
|
||||
[1, 2, 3, 4, 5],
|
||||
[1, 2, 3, 4, 5],
|
||||
[1, 2, 3, 4, 5]
|
||||
[1, 2, 3, 4, 5],
|
||||
]
|
||||
|
||||
def _create_a_file(self, file):
|
||||
|
@ -54,7 +58,6 @@ class PyexcelWriterBase:
|
|||
|
||||
|
||||
class PyexcelMultipleSheetBase:
|
||||
|
||||
def _write_test_file(self, filename):
|
||||
pyexcel.save_book_as(bookdict=self.content, dest_file_name=filename)
|
||||
|
||||
|
@ -80,7 +83,7 @@ class PyexcelMultipleSheetBase:
|
|||
expected = [[4, 4, 4, 4], [5, 5, 5, 5], [6, 6, 6, 6]]
|
||||
assert data == expected
|
||||
data = list(b["Sheet3"].rows())
|
||||
expected = [[u'X', u'Y', u'Z'], [1, 4, 7], [2, 5, 8], [3, 6, 9]]
|
||||
expected = [[u"X", u"Y", u"Z"], [1, 4, 7], [2, 5, 8], [3, 6, 9]]
|
||||
assert data == expected
|
||||
sheet3 = b["Sheet3"]
|
||||
sheet3.name_columns_by_row(0)
|
||||
|
|
|
@ -5,17 +5,19 @@
|
|||
"""
|
||||
|
||||
import os
|
||||
import datetime
|
||||
|
||||
import pyexcel as pe
|
||||
from _compact import OrderedDict
|
||||
|
||||
from mock import patch
|
||||
from nose import SkipTest
|
||||
from nose.tools import eq_, raises
|
||||
from pyexcel_xls import save_data
|
||||
from pyexcel_xls.xlsr import xldate_to_python_date
|
||||
from pyexcel_xls.xlsw import XLSWriter as Writer
|
||||
from _compact import OrderedDict
|
||||
from nose.tools import eq_, raises
|
||||
from nose import SkipTest
|
||||
import datetime
|
||||
from mock import patch
|
||||
|
||||
IN_TRAVIS = 'TRAVIS' in os.environ
|
||||
IN_TRAVIS = "TRAVIS" in os.environ
|
||||
|
||||
|
||||
def test_pyexcel_issue_5():
|
||||
|
@ -41,16 +43,15 @@ def test_issue_9_hidden_sheet():
|
|||
test_file = get_fixture("hidden_sheets.xls")
|
||||
book_dict = pe.get_book_dict(file_name=test_file)
|
||||
assert "hidden" not in book_dict
|
||||
eq_(book_dict['shown'], [['A', 'B']])
|
||||
eq_(book_dict["shown"], [["A", "B"]])
|
||||
|
||||
|
||||
def test_issue_9_hidden_sheet_2():
|
||||
test_file = get_fixture("hidden_sheets.xls")
|
||||
book_dict = pe.get_book_dict(file_name=test_file,
|
||||
skip_hidden_sheets=False)
|
||||
book_dict = pe.get_book_dict(file_name=test_file, skip_hidden_sheets=False)
|
||||
assert "hidden" in book_dict
|
||||
eq_(book_dict['shown'], [['A', 'B']])
|
||||
eq_(book_dict['hidden'], [['a', 'b']])
|
||||
eq_(book_dict["shown"], [["A", "B"]])
|
||||
eq_(book_dict["hidden"], [["a", "b"]])
|
||||
|
||||
|
||||
def test_issue_10_generator_as_content():
|
||||
|
@ -58,46 +59,52 @@ def test_issue_10_generator_as_content():
|
|||
def custom_row_renderer(row):
|
||||
for e in row:
|
||||
yield e
|
||||
|
||||
for i in range(2):
|
||||
yield custom_row_renderer([1, 2])
|
||||
|
||||
save_data("test.xls", {"sheet": data_gen()})
|
||||
|
||||
|
||||
@raises(IOError)
|
||||
def test_issue_13_empty_file_content():
|
||||
pe.get_sheet(file_content='', file_type='xls')
|
||||
pe.get_sheet(file_content="", file_type="xls")
|
||||
|
||||
|
||||
def test_issue_16_file_stream_has_no_getvalue():
|
||||
test_file = get_fixture("hidden_sheets.xls")
|
||||
with open(test_file, 'rb') as f:
|
||||
pe.get_sheet(file_stream=f, file_type='xls')
|
||||
with open(test_file, "rb") as f:
|
||||
pe.get_sheet(file_stream=f, file_type="xls")
|
||||
|
||||
|
||||
@patch('xlrd.open_workbook')
|
||||
@patch("xlrd.open_workbook")
|
||||
def test_issue_18_encoding_override_isnt_passed(fake_open):
|
||||
fake_open.return_value = None
|
||||
test_encoding = 'utf-32'
|
||||
test_encoding = "utf-32"
|
||||
from pyexcel_xls.xlsr import XLSBook
|
||||
|
||||
book = XLSBook()
|
||||
book.open('fake_file.xls', encoding_override=test_encoding)
|
||||
book.open("fake_file.xls", encoding_override=test_encoding)
|
||||
book._get_book()
|
||||
keywords = fake_open.call_args[1]
|
||||
assert keywords['encoding_override'] == test_encoding
|
||||
assert keywords["encoding_override"] == test_encoding
|
||||
|
||||
|
||||
def test_issue_20():
|
||||
if not IN_TRAVIS:
|
||||
raise SkipTest()
|
||||
pe.get_book(url="https://github.com/pyexcel/pyexcel-xls/raw/master/tests/fixtures/file_with_an_empty_sheet.xls") # noqa: E501
|
||||
pe.get_book(
|
||||
url="https://github.com/pyexcel/pyexcel-xls/raw/master/tests/fixtures/file_with_an_empty_sheet.xls" # noqa: E501
|
||||
)
|
||||
|
||||
|
||||
def test_issue_151():
|
||||
s = pe.get_sheet(
|
||||
file_name=get_fixture('pyexcel_issue_151.xlsx'),
|
||||
file_name=get_fixture("pyexcel_issue_151.xlsx"),
|
||||
skip_hidden_row_and_column=False,
|
||||
library='pyexcel-xls')
|
||||
eq_('#N/A', s[0, 0])
|
||||
library="pyexcel-xls",
|
||||
)
|
||||
eq_("#N/A", s[0, 0])
|
||||
|
||||
|
||||
@raises(NotImplementedError)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import os
|
||||
|
||||
from pyexcel_io import get_data, save_data
|
||||
from nose.tools import eq_
|
||||
from pyexcel_io import get_data, save_data
|
||||
|
||||
|
||||
class TestFilter:
|
||||
|
@ -13,49 +13,58 @@ class TestFilter:
|
|||
[3, 23, 33],
|
||||
[4, 24, 34],
|
||||
[5, 25, 35],
|
||||
[6, 26, 36]
|
||||
[6, 26, 36],
|
||||
]
|
||||
save_data(self.test_file, sample)
|
||||
self.sheet_name = "pyexcel_sheet1"
|
||||
|
||||
def test_filter_row(self):
|
||||
filtered_data = get_data(self.test_file, start_row=3,
|
||||
library="pyexcel-xls")
|
||||
filtered_data = get_data(
|
||||
self.test_file, start_row=3, library="pyexcel-xls"
|
||||
)
|
||||
expected = [[4, 24, 34], [5, 25, 35], [6, 26, 36]]
|
||||
eq_(filtered_data[self.sheet_name], expected)
|
||||
|
||||
def test_filter_row_2(self):
|
||||
filtered_data = get_data(self.test_file, start_row=3, row_limit=1,
|
||||
library="pyexcel-xls")
|
||||
filtered_data = get_data(
|
||||
self.test_file, start_row=3, row_limit=1, library="pyexcel-xls"
|
||||
)
|
||||
expected = [[4, 24, 34]]
|
||||
eq_(filtered_data[self.sheet_name], expected)
|
||||
|
||||
def test_filter_column(self):
|
||||
filtered_data = get_data(self.test_file, start_column=1,
|
||||
library="pyexcel-xls")
|
||||
expected = [[21, 31], [22, 32], [23, 33],
|
||||
[24, 34], [25, 35], [26, 36]]
|
||||
filtered_data = get_data(
|
||||
self.test_file, start_column=1, library="pyexcel-xls"
|
||||
)
|
||||
expected = [[21, 31], [22, 32], [23, 33], [24, 34], [25, 35], [26, 36]]
|
||||
eq_(filtered_data[self.sheet_name], expected)
|
||||
|
||||
def test_filter_column_2(self):
|
||||
filtered_data = get_data(self.test_file,
|
||||
start_column=1, column_limit=1,
|
||||
library="pyexcel-xls")
|
||||
filtered_data = get_data(
|
||||
self.test_file,
|
||||
start_column=1,
|
||||
column_limit=1,
|
||||
library="pyexcel-xls",
|
||||
)
|
||||
expected = [[21], [22], [23], [24], [25], [26]]
|
||||
eq_(filtered_data[self.sheet_name], expected)
|
||||
|
||||
def test_filter_both_ways(self):
|
||||
filtered_data = get_data(self.test_file,
|
||||
start_column=1, start_row=3,
|
||||
library="pyexcel-xls")
|
||||
filtered_data = get_data(
|
||||
self.test_file, start_column=1, start_row=3, library="pyexcel-xls"
|
||||
)
|
||||
expected = [[24, 34], [25, 35], [26, 36]]
|
||||
eq_(filtered_data[self.sheet_name], expected)
|
||||
|
||||
def test_filter_both_ways_2(self):
|
||||
filtered_data = get_data(self.test_file,
|
||||
start_column=1, column_limit=1,
|
||||
start_row=3, row_limit=1,
|
||||
library="pyexcel-xls")
|
||||
filtered_data = get_data(
|
||||
self.test_file,
|
||||
start_column=1,
|
||||
column_limit=1,
|
||||
start_row=3,
|
||||
row_limit=1,
|
||||
library="pyexcel-xls",
|
||||
)
|
||||
expected = [[24]]
|
||||
eq_(filtered_data[self.sheet_name], expected)
|
||||
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import os
|
||||
from textwrap import dedent
|
||||
from nose.tools import eq_
|
||||
|
||||
import pyexcel as pe
|
||||
|
||||
from nose.tools import eq_
|
||||
|
||||
|
||||
class TestDateFormat:
|
||||
def test_reading_date_format(self):
|
||||
|
@ -15,9 +16,11 @@ class TestDateFormat:
|
|||
0.0 0.0
|
||||
"""
|
||||
import datetime
|
||||
r = pe.get_sheet(file_name=os.path.join("tests", "fixtures",
|
||||
"date_field.xls"),
|
||||
library='pyexcel-xls')
|
||||
|
||||
r = pe.get_sheet(
|
||||
file_name=os.path.join("tests", "fixtures", "date_field.xls"),
|
||||
library="pyexcel-xls",
|
||||
)
|
||||
assert isinstance(r[1, 0], datetime.date)
|
||||
eq_(r[1, 0].strftime("%d/%m/%y"), "25/12/14")
|
||||
assert isinstance(r[1, 1], datetime.time) is True
|
||||
|
@ -27,12 +30,17 @@ class TestDateFormat:
|
|||
|
||||
def test_writing_date_format(self):
|
||||
import datetime
|
||||
|
||||
excel_filename = "testdateformat.xls"
|
||||
data = [[datetime.date(2014, 12, 25),
|
||||
data = [
|
||||
[
|
||||
datetime.date(2014, 12, 25),
|
||||
datetime.time(11, 11, 11),
|
||||
datetime.datetime(2014, 12, 25, 11, 11, 11)]]
|
||||
datetime.datetime(2014, 12, 25, 11, 11, 11),
|
||||
]
|
||||
]
|
||||
pe.save_as(dest_file_name=excel_filename, array=data)
|
||||
r = pe.get_sheet(file_name=excel_filename, library='pyexcel-xls')
|
||||
r = pe.get_sheet(file_name=excel_filename, library="pyexcel-xls")
|
||||
assert isinstance(r[0, 0], datetime.date) is True
|
||||
assert r[0, 0].strftime("%d/%m/%y") == "25/12/14"
|
||||
assert isinstance(r[0, 1], datetime.time) is True
|
||||
|
@ -46,46 +54,58 @@ class TestAutoDetectInt:
|
|||
def setUp(self):
|
||||
self.content = [[1, 2, 3.1]]
|
||||
self.test_file = "test_auto_detect_init.xls"
|
||||
pe.save_as(
|
||||
array=self.content, dest_file_name=self.test_file
|
||||
)
|
||||
pe.save_as(array=self.content, dest_file_name=self.test_file)
|
||||
|
||||
def test_auto_detect_int(self):
|
||||
sheet = pe.get_sheet(file_name=self.test_file, library="pyexcel-xls")
|
||||
expected = dedent("""
|
||||
expected = dedent(
|
||||
"""
|
||||
pyexcel_sheet1:
|
||||
+---+---+-----+
|
||||
| 1 | 2 | 3.1 |
|
||||
+---+---+-----+""").strip()
|
||||
+---+---+-----+"""
|
||||
).strip()
|
||||
eq_(str(sheet), expected)
|
||||
|
||||
def test_get_book_auto_detect_int(self):
|
||||
book = pe.get_book(file_name=self.test_file, library="pyexcel-xls")
|
||||
expected = dedent("""
|
||||
expected = dedent(
|
||||
"""
|
||||
pyexcel_sheet1:
|
||||
+---+---+-----+
|
||||
| 1 | 2 | 3.1 |
|
||||
+---+---+-----+""").strip()
|
||||
+---+---+-----+"""
|
||||
).strip()
|
||||
eq_(str(book), expected)
|
||||
|
||||
def test_auto_detect_int_false(self):
|
||||
sheet = pe.get_sheet(file_name=self.test_file, auto_detect_int=False,
|
||||
library="pyexcel-xls")
|
||||
expected = dedent("""
|
||||
sheet = pe.get_sheet(
|
||||
file_name=self.test_file,
|
||||
auto_detect_int=False,
|
||||
library="pyexcel-xls",
|
||||
)
|
||||
expected = dedent(
|
||||
"""
|
||||
pyexcel_sheet1:
|
||||
+-----+-----+-----+
|
||||
| 1.0 | 2.0 | 3.1 |
|
||||
+-----+-----+-----+""").strip()
|
||||
+-----+-----+-----+"""
|
||||
).strip()
|
||||
eq_(str(sheet), expected)
|
||||
|
||||
def test_get_book_auto_detect_int_false(self):
|
||||
book = pe.get_book(file_name=self.test_file, auto_detect_int=False,
|
||||
library="pyexcel-xls")
|
||||
expected = dedent("""
|
||||
book = pe.get_book(
|
||||
file_name=self.test_file,
|
||||
auto_detect_int=False,
|
||||
library="pyexcel-xls",
|
||||
)
|
||||
expected = dedent(
|
||||
"""
|
||||
pyexcel_sheet1:
|
||||
+-----+-----+-----+
|
||||
| 1.0 | 2.0 | 3.1 |
|
||||
+-----+-----+-----+""").strip()
|
||||
+-----+-----+-----+"""
|
||||
).strip()
|
||||
eq_(str(book), expected)
|
||||
|
||||
def tearDown(self):
|
||||
|
|
|
@ -1,18 +1,22 @@
|
|||
import os
|
||||
|
||||
from nose.tools import eq_
|
||||
from pyexcel_xls import get_data
|
||||
|
||||
|
||||
def test_simple_hidden_sheets():
|
||||
data = get_data(os.path.join("tests", "fixtures", "hidden.xls"),
|
||||
skip_hidden_row_and_column=True)
|
||||
data = get_data(
|
||||
os.path.join("tests", "fixtures", "hidden.xls"),
|
||||
skip_hidden_row_and_column=True,
|
||||
)
|
||||
expected = [[1, 3], [7, 9]]
|
||||
eq_(data['Sheet1'], expected)
|
||||
eq_(data["Sheet1"], expected)
|
||||
|
||||
|
||||
def test_complex_hidden_sheets():
|
||||
data = get_data(
|
||||
os.path.join("tests", "fixtures", "complex_hidden_sheets.xls"),
|
||||
skip_hidden_row_and_column=True)
|
||||
skip_hidden_row_and_column=True,
|
||||
)
|
||||
expected = [[1, 3, 5, 7, 9], [31, 33, 35, 37, 39], [61, 63, 65, 67]]
|
||||
eq_(data['Sheet1'], expected)
|
||||
eq_(data["Sheet1"], expected)
|
||||
|
|
|
@ -1,23 +1,26 @@
|
|||
import os
|
||||
|
||||
from nose.tools import eq_
|
||||
from pyexcel_xls import get_data
|
||||
from pyexcel_xls.xlsr import MergedCell
|
||||
from nose.tools import eq_
|
||||
|
||||
|
||||
def test_merged_cells():
|
||||
data = get_data(
|
||||
get_fixture("merged-cell-sheet.xls"),
|
||||
detect_merged_cells=True,
|
||||
library="pyexcel-xls")
|
||||
library="pyexcel-xls",
|
||||
)
|
||||
expected = [[1, 2, 3], [1, 5, 6], [1, 8, 9], [10, 11, 11]]
|
||||
eq_(data['Sheet1'], expected)
|
||||
eq_(data["Sheet1"], expected)
|
||||
|
||||
|
||||
def test_complex_merged_cells():
|
||||
data = get_data(
|
||||
get_fixture("complex-merged-cells-sheet.xls"),
|
||||
detect_merged_cells=True,
|
||||
library="pyexcel-xls")
|
||||
library="pyexcel-xls",
|
||||
)
|
||||
expected = [
|
||||
[1, 1, 2, 3, 15, 16, 22, 22, 24, 24],
|
||||
[1, 1, 4, 5, 15, 17, 22, 22, 24, 24],
|
||||
|
@ -26,16 +29,17 @@ def test_complex_merged_cells():
|
|||
[13, 11, 11, 14, 20, 20, 23, 23, 24, 24],
|
||||
[21, 21, 21, 21, 21, 21, 23, 23, 24, 24],
|
||||
[25, 25, 25, 25, 25, 25, 25, 25, 25, 25],
|
||||
[25, 25, 25, 25, 25, 25, 25, 25, 25, 25]
|
||||
[25, 25, 25, 25, 25, 25, 25, 25, 25, 25],
|
||||
]
|
||||
eq_(data['Sheet1'], expected)
|
||||
eq_(data["Sheet1"], expected)
|
||||
|
||||
|
||||
def test_exploration():
|
||||
data = get_data(
|
||||
get_fixture("merged-sheet-exploration.xls"),
|
||||
detect_merged_cells=True,
|
||||
library="pyexcel-xls")
|
||||
library="pyexcel-xls",
|
||||
)
|
||||
expected_sheet1 = [
|
||||
[1, 1, 1, 1, 1, 1],
|
||||
[2],
|
||||
|
@ -46,28 +50,23 @@ def test_exploration():
|
|||
[2],
|
||||
[2],
|
||||
[2],
|
||||
[2]]
|
||||
eq_(data['Sheet1'], expected_sheet1)
|
||||
expected_sheet2 = [
|
||||
[3],
|
||||
[3],
|
||||
[3],
|
||||
[3, 4, 4, 4, 4, 4, 4],
|
||||
[3],
|
||||
[3],
|
||||
[3]]
|
||||
eq_(data['Sheet2'], expected_sheet2)
|
||||
[2],
|
||||
]
|
||||
eq_(data["Sheet1"], expected_sheet1)
|
||||
expected_sheet2 = [[3], [3], [3], [3, 4, 4, 4, 4, 4, 4], [3], [3], [3]]
|
||||
eq_(data["Sheet2"], expected_sheet2)
|
||||
expected_sheet3 = [
|
||||
['', '', '', '', '', 2, 2, 2],
|
||||
["", "", "", "", "", 2, 2, 2],
|
||||
[],
|
||||
[],
|
||||
[],
|
||||
['', '', '', 5],
|
||||
['', '', '', 5],
|
||||
['', '', '', 5],
|
||||
['', '', '', 5],
|
||||
['', '', '', 5]]
|
||||
eq_(data['Sheet3'], expected_sheet3)
|
||||
["", "", "", 5],
|
||||
["", "", "", 5],
|
||||
["", "", "", 5],
|
||||
["", "", "", 5],
|
||||
["", "", "", 5],
|
||||
]
|
||||
eq_(data["Sheet3"], expected_sheet3)
|
||||
|
||||
|
||||
def test_merged_cell_class():
|
||||
|
@ -75,10 +74,9 @@ def test_merged_cell_class():
|
|||
merged_cell = MergedCell(1, 4, 1, 4)
|
||||
merged_cell.register_cells(test_dict)
|
||||
keys = sorted(list(test_dict.keys()))
|
||||
expected = ['1-1', '1-2', '1-3', '2-1',
|
||||
'2-2', '2-3', '3-1', '3-2', '3-3']
|
||||
expected = ["1-1", "1-2", "1-3", "2-1", "2-2", "2-3", "3-1", "3-2", "3-3"]
|
||||
eq_(keys, expected)
|
||||
eq_(merged_cell, test_dict['3-1'])
|
||||
eq_(merged_cell, test_dict["3-1"])
|
||||
|
||||
|
||||
def get_fixture(file_name):
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
import os
|
||||
import sys
|
||||
|
||||
import pyexcel
|
||||
from nose.tools import raises
|
||||
from base import PyexcelMultipleSheetBase
|
||||
|
||||
from nose.tools import raises
|
||||
|
||||
if sys.version_info[0] == 2 and sys.version_info[1] < 7:
|
||||
from ordereddict import OrderedDict
|
||||
else:
|
||||
|
@ -31,8 +33,7 @@ class TestAddBooks:
|
|||
3,3,3,3
|
||||
"""
|
||||
self.rows = 3
|
||||
pyexcel.save_book_as(bookdict=self.content,
|
||||
dest_file_name=file)
|
||||
pyexcel.save_book_as(bookdict=self.content, dest_file_name=file)
|
||||
|
||||
def setUp(self):
|
||||
self.testfile = "multiple1.xls"
|
||||
|
@ -45,12 +46,12 @@ class TestAddBooks:
|
|||
def test_load_a_single_sheet(self):
|
||||
b1 = pyexcel.get_book(file_name=self.testfile, sheet_name="Sheet1")
|
||||
assert len(b1.sheet_names()) == 1
|
||||
assert b1['Sheet1'].to_array() == self.content['Sheet1']
|
||||
assert b1["Sheet1"].to_array() == self.content["Sheet1"]
|
||||
|
||||
def test_load_a_single_sheet2(self):
|
||||
b1 = pyexcel.load_book(self.testfile, sheet_index=0)
|
||||
assert len(b1.sheet_names()) == 1
|
||||
assert b1['Sheet1'].to_array() == self.content['Sheet1']
|
||||
assert b1["Sheet1"].to_array() == self.content["Sheet1"]
|
||||
|
||||
@raises(IndexError)
|
||||
def test_load_a_single_sheet3(self):
|
||||
|
@ -219,18 +220,17 @@ class TestMultiSheetReader:
|
|||
self.testfile = "file_with_an_empty_sheet.xls"
|
||||
|
||||
def test_reader_with_correct_sheets(self):
|
||||
r = pyexcel.BookReader(os.path.join("tests",
|
||||
"fixtures",
|
||||
self.testfile))
|
||||
r = pyexcel.BookReader(
|
||||
os.path.join("tests", "fixtures", self.testfile)
|
||||
)
|
||||
assert r.number_of_sheets() == 3
|
||||
|
||||
|
||||
def _produce_ordered_dict():
|
||||
data_dict = OrderedDict()
|
||||
data_dict.update({
|
||||
"Sheet1": [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]]})
|
||||
data_dict.update({
|
||||
"Sheet2": [[4, 4, 4, 4], [5, 5, 5, 5], [6, 6, 6, 6]]})
|
||||
data_dict.update({
|
||||
"Sheet3": [[u'X', u'Y', u'Z'], [1, 4, 7], [2, 5, 8], [3, 6, 9]]})
|
||||
data_dict.update({"Sheet1": [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]]})
|
||||
data_dict.update({"Sheet2": [[4, 4, 4, 4], [5, 5, 5, 5], [6, 6, 6, 6]]})
|
||||
data_dict.update(
|
||||
{"Sheet3": [[u"X", u"Y", u"Z"], [1, 4, 7], [2, 5, 8], [3, 6, 9]]}
|
||||
)
|
||||
return data_dict
|
||||
|
|
|
@ -1,33 +1,32 @@
|
|||
import os
|
||||
|
||||
import pyexcel
|
||||
from nose.tools import eq_
|
||||
from base import create_sample_file1
|
||||
|
||||
from nose.tools import eq_
|
||||
|
||||
|
||||
class TestStringIO:
|
||||
|
||||
def test_xls_stringio(self):
|
||||
testfile = "cute.xls"
|
||||
create_sample_file1(testfile)
|
||||
with open(testfile, "rb") as f:
|
||||
content = f.read()
|
||||
r = pyexcel.get_sheet(file_type="xls", file_content=content,
|
||||
library="pyexcel-xls")
|
||||
result = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 1.1, 1]
|
||||
r = pyexcel.get_sheet(
|
||||
file_type="xls", file_content=content, library="pyexcel-xls"
|
||||
)
|
||||
result = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", 1.1, 1]
|
||||
actual = list(r.enumerate())
|
||||
eq_(result, actual)
|
||||
if os.path.exists(testfile):
|
||||
os.unlink(testfile)
|
||||
|
||||
def test_xls_output_stringio(self):
|
||||
data = [
|
||||
[1, 2, 3],
|
||||
[4, 5, 6]
|
||||
]
|
||||
io = pyexcel.save_as(dest_file_type="xls",
|
||||
array=data)
|
||||
r = pyexcel.get_sheet(file_type="xls", file_content=io.getvalue(),
|
||||
library="pyexcel-xls")
|
||||
data = [[1, 2, 3], [4, 5, 6]]
|
||||
io = pyexcel.save_as(dest_file_type="xls", array=data)
|
||||
r = pyexcel.get_sheet(
|
||||
file_type="xls", file_content=io.getvalue(), library="pyexcel-xls"
|
||||
)
|
||||
result = [1, 2, 3, 4, 5, 6]
|
||||
actual = list(r.enumerate())
|
||||
eq_(result, actual)
|
||||
|
|
|
@ -1,15 +1,17 @@
|
|||
import os
|
||||
from pyexcel_xls.xlsw import XLSWriter as Writer
|
||||
from pyexcel_xls.xlsr import XLSBook as Reader
|
||||
|
||||
from base import PyexcelWriterBase, PyexcelHatWriterBase
|
||||
|
||||
from pyexcel_xls.xlsr import XLSBook as Reader
|
||||
from pyexcel_xls.xlsw import XLSWriter as Writer
|
||||
|
||||
|
||||
class TestNativeXLSWriter:
|
||||
def test_write_book(self):
|
||||
self.content = {
|
||||
"Sheet1": [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]],
|
||||
"Sheet2": [[4, 4, 4, 4], [5, 5, 5, 5], [6, 6, 6, 6]],
|
||||
"Sheet3": [[u'X', u'Y', u'Z'], [1, 4, 7], [2, 5, 8], [3, 6, 9]]
|
||||
"Sheet3": [[u"X", u"Y", u"Z"], [1, 4, 7], [2, 5, 8], [3, 6, 9]],
|
||||
}
|
||||
self.testfile = "writer.xls"
|
||||
writer = Writer()
|
||||
|
|
Loading…
Reference in New Issue