Skip to content

Commit 41b96c2

Browse files
committed
Defer imports to improve startup speed
1 parent b783693 commit 41b96c2

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

Diff for: src/tablib/core.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@
88
:license: MIT, see LICENSE for more details.
99
"""
1010

11-
from copy import copy
12-
from operator import itemgetter
13-
1411
from .exceptions import (
1512
HeadersNeeded,
1613
InvalidDatasetIndex,
@@ -638,6 +635,8 @@ def filter(self, tag):
638635
"""Returns a new instance of the :class:`Dataset`, excluding any rows
639636
that do not contain the given :ref:`tags <tags>`.
640637
"""
638+
import copy
639+
641640
_dset = copy(self)
642641
_dset._data = [row for row in _dset._data if row.has_tag(tag)]
643642

@@ -651,6 +650,7 @@ def sort(self, col, reverse=False):
651650
Returns a new :class:`Dataset` instance where columns have been
652651
sorted.
653652
"""
653+
from operator import itemgetter
654654

655655
if isinstance(col, str):
656656

@@ -745,6 +745,8 @@ def stack(self, other):
745745
raise InvalidDimensions
746746

747747
# Copy the source data
748+
from copy import copy
749+
748750
_dset = copy(self)
749751

750752
rows_to_stack = [row for row in _dset._data]

Diff for: src/tablib/formats/_csv.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
""" Tablib - *SV Support.
22
"""
33

4-
import csv
54
from io import StringIO
65

76

@@ -14,6 +13,8 @@ class CSVFormat:
1413
@classmethod
1514
def export_stream_set(cls, dataset, **kwargs):
1615
"""Returns CSV representation of Dataset as file-like."""
16+
import csv
17+
1718
stream = StringIO()
1819

1920
kwargs.setdefault('delimiter', cls.DEFAULT_DELIMITER)
@@ -35,6 +36,7 @@ def export_set(cls, dataset, **kwargs):
3536
@classmethod
3637
def import_set(cls, dset, in_stream, headers=True, skip_lines=0, **kwargs):
3738
"""Returns dataset from CSV stream."""
39+
import csv
3840

3941
dset.wipe()
4042

@@ -54,6 +56,8 @@ def import_set(cls, dset, in_stream, headers=True, skip_lines=0, **kwargs):
5456
@classmethod
5557
def detect(cls, stream, delimiter=None):
5658
"""Returns True if given stream is valid CSV."""
59+
import csv
60+
5761
try:
5862
csv.Sniffer().sniff(stream.read(2048), delimiters=delimiter or cls.DEFAULT_DELIMITER)
5963
return True

Diff for: src/tablib/formats/_json.py

+11-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
""" Tablib - JSON Support
22
"""
3-
import decimal
4-
import json
5-
from uuid import UUID
6-
73
import tablib
84

95

106
def serialize_objects_handler(obj):
7+
import decimal
8+
from uuid import UUID
9+
1110
if isinstance(obj, (decimal.Decimal, UUID)):
1211
return str(obj)
1312
elif hasattr(obj, 'isoformat'):
@@ -23,27 +22,33 @@ class JSONFormat:
2322
@classmethod
2423
def export_set(cls, dataset):
2524
"""Returns JSON representation of Dataset."""
25+
import json
26+
2627
return json.dumps(
2728
dataset.dict, default=serialize_objects_handler, ensure_ascii=False
2829
)
2930

3031
@classmethod
3132
def export_book(cls, databook):
3233
"""Returns JSON representation of Databook."""
34+
import json
35+
3336
return json.dumps(
3437
databook._package(), default=serialize_objects_handler, ensure_ascii=False
3538
)
3639

3740
@classmethod
3841
def import_set(cls, dset, in_stream):
3942
"""Returns dataset from JSON stream."""
43+
import json
4044

4145
dset.wipe()
4246
dset.dict = json.load(in_stream)
4347

4448
@classmethod
4549
def import_book(cls, dbook, in_stream):
4650
"""Returns databook from JSON stream."""
51+
import json
4752

4853
dbook.wipe()
4954
for sheet in json.load(in_stream):
@@ -55,6 +60,8 @@ def import_book(cls, dbook, in_stream):
5560
@classmethod
5661
def detect(cls, stream):
5762
"""Returns True if given stream is valid JSON."""
63+
import json
64+
5865
try:
5966
json.load(stream)
6067
return True

0 commit comments

Comments
 (0)