Skip to content

Commit

Permalink
Merge tag '0.25.2' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
felliott committed Mar 29, 2018
2 parents 8a10328 + ffb2dae commit 53698ea
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 6 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@
ChangeLog
*********

0.25.2 (2018-03-29)
===================
- Fix: Release memory consumed during csv-rendering process and force a garbage-collect cycle to
make it available for the next big render.
- Fix: Re-enable rendering for csv files.

0.25.1 (2018-03-29)
===================
- Fix: Temporarily disable rendering for csv files. csv continues to cause resource issues for MFR
Expand Down
2 changes: 2 additions & 0 deletions mfr/extensions/tabular/libs/stdlib_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ def csv_stdlib(fp):
else:
_set_dialect_quote_attrs(dialect, data)

del data
reader = csv.DictReader(fp, dialect=dialect)
columns = []
# update the reader field names to avoid duplicate column names when performing row extraction
Expand Down Expand Up @@ -53,6 +54,7 @@ def csv_stdlib(fp):
if not columns and not rows:
raise EmptyTableError('Table empty or corrupt.', extension='csv')

del reader
return {'Sheet 1': (columns, rows)}


Expand Down
31 changes: 27 additions & 4 deletions mfr/extensions/tabular/render.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import json
import gc
import logging
import os

Expand Down Expand Up @@ -30,7 +31,12 @@ def render(self):
)

with open(self.file_path, errors='replace') as fp:
sheets, size = self._render_grid(fp, self.metadata.ext)
sheets, size, nbr_rows, nbr_cols = self._render_grid(fp, self.metadata.ext)

# Force GC
gc.collect()

if sheets and size:
return self.TEMPLATE.render(
base=self.assets_url,
width=settings.TABLE_WIDTH,
Expand All @@ -39,6 +45,14 @@ def render(self):
options=json.dumps(size),
)

assert nbr_rows and nbr_cols
raise exceptions.TableTooBigError(
'Table is too large to render.',
extension=self.metadata.ext,
nbr_cols=nbr_cols,
nbr_rows=nbr_rows
)

@property
def file_required(self):
return True
Expand All @@ -59,6 +73,11 @@ def _render_grid(self, fp, ext, *args, **kwargs):
size = settings.SMALL_TABLE
self._renderer_tabular_metrics['size'] = 'small'
self._renderer_tabular_metrics['nbr_sheets'] = len(sheets)

table_too_big = False
nbr_cols = 0
nbr_rows = 0

for sheet_title in sheets:
sheet = sheets[sheet_title]

Expand All @@ -74,10 +93,14 @@ def _render_grid(self, fp, ext, *args, **kwargs):

nbr_rows = len(sheet[1])
if nbr_cols > settings.MAX_SIZE or nbr_rows > settings.MAX_SIZE:
raise exceptions.TableTooBigError('Table is too large to render.', extension=ext,
nbr_cols=nbr_cols, nbr_rows=nbr_rows)
table_too_big = True
break

if table_too_big:
del sheets
return None, None, nbr_rows, nbr_cols

return sheets, size
return sheets, size, None, None

def _populate_data(self, fp, ext):
"""Determine the appropriate library and use it to populate rows and columns
Expand Down
2 changes: 1 addition & 1 deletion mfr/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '0.25.1'
__version__ = '0.25.2'
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -711,7 +711,7 @@ def parse_requirements(requirements):
# '.svg = mfr.extensions.svg:SvgRenderer',

# tabular
# '.csv = mfr.extensions.tabular:TabularRenderer',
'.csv = mfr.extensions.tabular:TabularRenderer',
'.tsv = mfr.extensions.tabular:TabularRenderer',
'.xls = mfr.extensions.tabular:TabularRenderer',
'.xlsx = mfr.extensions.tabular:TabularRenderer',
Expand Down

0 comments on commit 53698ea

Please sign in to comment.