Skip to content

Commit 35f1058

Browse files
AddisonSchillerfelliott
authored andcommitted
Add support for .dta to tabular renderer
* Also added notes to some commented out formats in setup.py [SVCS-403]
1 parent 6ac4d12 commit 35f1058

File tree

6 files changed

+49
-12
lines changed

6 files changed

+49
-12
lines changed

mfr/extensions/tabular/libs/panda_tools.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def dta_pandas(fp):
3333
:param fp: File pointer object
3434
:return: tuple of table headers and data
3535
"""
36-
dataframe = pandas.read_stata(fp)
36+
dataframe = pandas.read_stata(fp.name).replace(numpy.nan, '')
3737
return data_from_dataframe(dataframe)
3838

3939

mfr/extensions/tabular/render.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def _populate_data(self, fp, ext):
7474
self._renderer_tabular_metrics['importer'] = function.__name__
7575
try:
7676
return imported(fp)
77-
except KeyError:
77+
except (KeyError, ValueError):
7878
raise exceptions.UnexpectedFormattingError(
7979
'Unexpected formatting error.',
8080
extension=self.metadata.ext,

setup.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ def parse_requirements(requirements):
113113
'.stw = mfr.extensions.unoconv:UnoconvExporter',
114114
'.svg = mfr.extensions.unoconv:UnoconvExporter',
115115
'.svm = mfr.extensions.unoconv:UnoconvExporter',
116-
'.swf = mfr.extensions.unoconv:UnoconvExporter',
116+
# Renders junk at the moment
117+
# '.swf = mfr.extensions.unoconv:UnoconvExporter',
117118
'.sxc = mfr.extensions.unoconv:UnoconvExporter',
118119
'.sxd = mfr.extensions.unoconv:UnoconvExporter',
119120
'.sxi = mfr.extensions.unoconv:UnoconvExporter',
@@ -704,7 +705,7 @@ def parse_requirements(requirements):
704705
'.tsv = mfr.extensions.tabular:TabularRenderer',
705706
'.xls = mfr.extensions.tabular:TabularRenderer',
706707
'.xlsx = mfr.extensions.tabular:TabularRenderer',
707-
#'.dta = mfr.extensions.tabular:TabularRenderer',
708+
'.dta = mfr.extensions.tabular:TabularRenderer',
708709
'.sav = mfr.extensions.tabular:TabularRenderer',
709710
#'.ods = mfr.extensions.tabular:TabularRenderer',
710711

@@ -764,7 +765,8 @@ def parse_requirements(requirements):
764765
'.stw = mfr.extensions.unoconv:UnoconvRenderer',
765766
'.svg = mfr.extensions.unoconv:UnoconvRenderer',
766767
'.svm = mfr.extensions.unoconv:UnoconvRenderer',
767-
'.swf = mfr.extensions.unoconv:UnoconvRenderer',
768+
# Renders junk at the moment
769+
# '.swf = mfr.extensions.unoconv:UnoconvRenderer',
768770
'.sxc = mfr.extensions.unoconv:UnoconvRenderer',
769771
'.sxd = mfr.extensions.unoconv:UnoconvRenderer',
770772
'.sxi = mfr.extensions.unoconv:UnoconvRenderer',
@@ -787,6 +789,7 @@ def parse_requirements(requirements):
787789
# video
788790
'.mp4 = mfr.extensions.video:VideoRenderer',
789791
'.m4v = mfr.extensions.video:VideoRenderer',
792+
# Unable to support at this time
790793
#'.avi = mfr.extensions.video:VideoRenderer',
791794
'.ogv = mfr.extensions.video:VideoRenderer',
792795
#'.wmv = mfr.extensions.video:VideoRenderer',
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
,id,target,gender,likely_discriminated,promoted,responsible,compensated,would_apply,chances,attractive_employer,put_off_similar_jobs,work,work_experience,studies,age
2+
0,159.0,Erik,male,4.0,4.0,4.0,1.0,6.0,6.0,1.0,1.0,studier,mattlig,Psykologi,22.0
3+
1,97.0,Maria,male,5.0,4.0,6.0,4.0,4.0,4.0,2.0,1.0,studier,stor,Elektroteknik,25.0
4+
2,56.0,Erik,male,1.0,4.0,1.0,1.0,5.0,1.0,4.0,1.0,studier,lite,Medicin,23.0
5+
3,205.0,Maria,male,1.0,4.0,7.0,1.0,7.0,1.0,4.0,1.0,studier,mattlig,ekonomi och ledarskap,25.0
6+
4,206.0,Erik,male,1.0,1.0,1.0,1.0,7.0,4.0,4.0,1.0,studier,mattlig,miljö,25.0
7+
5,210.0,Erik,male,1.0,1.0,1.0,1.0,7.0,4.0,4.0,1.0,arbete,mattlig, ,34.0
8+
6,151.0,Maria,male,1.0,4.0,2.0,1.0,7.0,4.0,4.0,1.0,studier,mattlig,Strat komm,24.0
2.46 KB
Binary file not shown.

tests/extensions/tabular/test_panda_tools.py

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import os
22

3+
import pytest
4+
35
from mfr.extensions.tabular.libs import panda_tools
46

57
BASE = os.path.dirname(os.path.abspath(__file__))
@@ -31,11 +33,35 @@ def test_tsv_pandas(self):
3133
assert sheet[0][0] == {'field': 'one\ttwo\tthree', 'id': 'one\ttwo\tthree', 'name': 'one\ttwo\tthree', 'sortable': True}
3234
assert sheet[1][0] == {'one\ttwo\tthree': 'a\tb\tc'}
3335

34-
# def test_dta_pandas():
35-
# with open('mfr_tabular/tests/fixtures/test.dta') as fp:
36-
# headers, data = panda_tools.dta_pandas(fp)
36+
def test_invalid_dta(self):
37+
with open(os.path.join(BASE, 'files', 'invalid.dta')) as fp:
38+
with pytest.raises(ValueError):
39+
panda_tools.dta_pandas(fp)
40+
41+
def test_dta_pandas(self):
42+
with open(os.path.join(BASE, 'files', 'test.dta')) as fp:
43+
sheets = panda_tools.dta_pandas(fp)
3744

38-
# assert headers[0] == {'field': 'one', 'id': 'one', 'name': 'one'}
39-
# assert data[0] == {'one': 'a', 'two': 'b', 'three': 'c'}
40-
# assert len(data) is 2
41-
# assert len(headers) is 3
45+
sheet = sheets.popitem()[1]
46+
assert sheet == ([{'id': 'Actor', 'name': 'Actor', 'field': 'Actor', 'sortable': True},
47+
{'id': 'IMDBscore', 'name': 'IMDBscore', 'field': 'IMDBscore', 'sortable': True}],
48+
[{'Actor': '1', 'IMDBscore': 6.6}, {'Actor': '1', 'IMDBscore': 6.5},
49+
{'Actor': '1', 'IMDBscore': 7.3}, {'Actor': '1', 'IMDBscore': 7.8},
50+
{'Actor': '1', 'IMDBscore': 6.3}, {'Actor': '1', 'IMDBscore': 6.6},
51+
{'Actor': '1', 'IMDBscore': 6.1}, {'Actor': '1', 'IMDBscore': 7.1},
52+
{'Actor': '1', 'IMDBscore': 5.7}, {'Actor': '1', 'IMDBscore': 5.7},
53+
{'Actor': '1', 'IMDBscore': 7.1}, {'Actor': '1', 'IMDBscore': 7.6},
54+
{'Actor': '1', 'IMDBscore': 7.1}, {'Actor': '1', 'IMDBscore': 3.8},
55+
{'Actor': '1', 'IMDBscore': 8.0}, {'Actor': '1', 'IMDBscore': 4.7},
56+
{'Actor': '1', 'IMDBscore': 6.5}, {'Actor': '1', 'IMDBscore': 7.6},
57+
{'Actor': '1', 'IMDBscore': 6.3}, {'Actor': '1', 'IMDBscore': 5.4},
58+
{'Actor': '2', 'IMDBscore': 7.1}, {'Actor': '2', 'IMDBscore': 7.3},
59+
{'Actor': '2', 'IMDBscore': 6.2}, {'Actor': '2', 'IMDBscore': 7.4},
60+
{'Actor': '2', 'IMDBscore': 7.5}, {'Actor': '2', 'IMDBscore': 6.7},
61+
{'Actor': '2', 'IMDBscore': 6.2}, {'Actor': '2', 'IMDBscore': 4.7},
62+
{'Actor': '2', 'IMDBscore': 6.5}, {'Actor': '2', 'IMDBscore': 5.5},
63+
{'Actor': '2', 'IMDBscore': 5.4}, {'Actor': '2', 'IMDBscore': 7.7},
64+
{'Actor': '2', 'IMDBscore': 7.1}, {'Actor': '2', 'IMDBscore': 6.1},
65+
{'Actor': '2', 'IMDBscore': 6.7}, {'Actor': '2', 'IMDBscore': 7.0},
66+
{'Actor': '2', 'IMDBscore': 5.8}, {'Actor': '2', 'IMDBscore': 4.1},
67+
{'Actor': '2', 'IMDBscore': 5.7}, {'Actor': '2', 'IMDBscore': 6.1}])

0 commit comments

Comments
 (0)