Read about our upcoming Code of Conduct on this issue

Commit 783183af authored by eirikur@Eirikurs-MacBook-Pro.local's avatar eirikur@Eirikurs-MacBook-Pro.local
Browse files

Fix bug that prevents loading of charts without series

--HG--
branch : fix-reading-chart-with-no-series
parent 15df72eae2f9
......@@ -23,6 +23,6 @@ def read_chart(chartspace):
chart.backWall = cs.chart.backWall
chart.pivotSource = cs.pivotSource
chart.pivotFormats = cs.chart.pivotFmts
chart.idx_base = min(s.idx for s in chart.series)
chart.idx_base = min((s.idx for s in chart.series), default=0)
return chart
<?xml version="1.0" standalone="yes"?>
<c:chartSpace xmlns:c="http://schemas.openxmlformats.org/drawingml/2006/chart"
xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
xmlns:c16r2="http://schemas.microsoft.com/office/drawing/2015/06/chart">
<c:date1904 val="0"/>
<c:lang val="en-GB"/>
<c:roundedCorners val="0"/>
<mc:AlternateContent xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
<mc:Choice Requires="c14"
xmlns:c14="http://schemas.microsoft.com/office/drawing/2007/8/2/chart">
<c14:style val="102"/>
</mc:Choice>
<mc:Fallback>
<c:style val="2"/>
</mc:Fallback>
</mc:AlternateContent>
<c:chart>
<c:title>
<c:overlay val="0"/>
<c:spPr>
<a:noFill/>
<a:ln>
<a:noFill/>
</a:ln>
<a:effectLst/>
</c:spPr>
<c:txPr>
<a:bodyPr rot="0" spcFirstLastPara="1" vertOverflow="ellipsis" vert="horz" wrap="square" anchor="ctr" anchorCtr="1"/>
<a:lstStyle/>
<a:p>
<a:pPr>
<a:defRPr sz="1400" b="0" i="0" u="none" strike="noStrike" kern="1200" spc="0" baseline="0">
<a:solidFill>
<a:schemeClr val="tx1">
<a:lumMod val="65000"/>
<a:lumOff val="35000"/>
</a:schemeClr>
</a:solidFill>
<a:latin typeface="+mn-lt"/>
<a:ea typeface="+mn-ea"/>
<a:cs typeface="+mn-cs"/>
</a:defRPr>
</a:pPr>
<a:endParaRPr lang="en-US"/>
</a:p>
</c:txPr>
</c:title>
<c:autoTitleDeleted val="0"/>
<c:plotArea>
<c:layout/>
<c:barChart>
<c:barDir val="col"/>
<c:grouping val="clustered"/>
<c:varyColors val="0"/>
<c:dLbls>
<c:showLegendKey val="0"/>
<c:showVal val="0"/>
<c:showCatName val="0"/>
<c:showSerName val="0"/>
<c:showPercent val="0"/>
<c:showBubbleSize val="0"/>
</c:dLbls>
<c:gapWidth val="219"/>
<c:overlap val="-27"/>
<c:axId val="1188816191"/>
<c:axId val="1188602447"/>
</c:barChart>
<c:catAx>
<c:axId val="1188816191"/>
<c:scaling>
<c:orientation val="minMax"/>
</c:scaling>
<c:delete val="0"/>
<c:axPos val="b"/>
<c:majorTickMark val="none"/>
<c:minorTickMark val="none"/>
<c:tickLblPos val="nextTo"/>
<c:spPr>
<a:noFill/>
<a:ln w="9525" cap="flat" cmpd="sng" algn="ctr">
<a:solidFill>
<a:schemeClr val="tx1">
<a:lumMod val="15000"/>
<a:lumOff val="85000"/>
</a:schemeClr>
</a:solidFill>
<a:round/>
</a:ln>
<a:effectLst/>
</c:spPr>
<c:txPr>
<a:bodyPr rot="-60000000" spcFirstLastPara="1" vertOverflow="ellipsis" vert="horz" wrap="square" anchor="ctr" anchorCtr="1"/>
<a:lstStyle/>
<a:p>
<a:pPr>
<a:defRPr sz="900" b="0" i="0" u="none" strike="noStrike" kern="1200" baseline="0">
<a:solidFill>
<a:schemeClr val="tx1">
<a:lumMod val="65000"/>
<a:lumOff val="35000"/>
</a:schemeClr>
</a:solidFill>
<a:latin typeface="+mn-lt"/>
<a:ea typeface="+mn-ea"/>
<a:cs typeface="+mn-cs"/>
</a:defRPr>
</a:pPr>
<a:endParaRPr lang="en-US"/>
</a:p>
</c:txPr>
<c:crossAx val="1188602447"/>
<c:crosses val="autoZero"/>
<c:auto val="1"/>
<c:lblAlgn val="ctr"/>
<c:lblOffset val="100"/>
<c:noMultiLvlLbl val="0"/>
</c:catAx>
<c:valAx>
<c:axId val="1188602447"/>
<c:scaling>
<c:orientation val="minMax"/>
</c:scaling>
<c:delete val="0"/>
<c:axPos val="l"/>
<c:majorGridlines>
<c:spPr>
<a:ln w="9525" cap="flat" cmpd="sng" algn="ctr">
<a:solidFill>
<a:schemeClr val="tx1">
<a:lumMod val="15000"/>
<a:lumOff val="85000"/>
</a:schemeClr>
</a:solidFill>
<a:round/>
</a:ln>
<a:effectLst/>
</c:spPr>
</c:majorGridlines>
<c:numFmt formatCode="General" sourceLinked="1"/>
<c:majorTickMark val="none"/>
<c:minorTickMark val="none"/>
<c:tickLblPos val="nextTo"/>
<c:spPr>
<a:noFill/>
<a:ln>
<a:noFill/>
</a:ln>
<a:effectLst/>
</c:spPr>
<c:txPr>
<a:bodyPr rot="-60000000" spcFirstLastPara="1" vertOverflow="ellipsis" vert="horz" wrap="square" anchor="ctr" anchorCtr="1"/>
<a:lstStyle/>
<a:p>
<a:pPr>
<a:defRPr sz="900" b="0" i="0" u="none" strike="noStrike" kern="1200" baseline="0">
<a:solidFill>
<a:schemeClr val="tx1">
<a:lumMod val="65000"/>
<a:lumOff val="35000"/>
</a:schemeClr>
</a:solidFill>
<a:latin typeface="+mn-lt"/>
<a:ea typeface="+mn-ea"/>
<a:cs typeface="+mn-cs"/>
</a:defRPr>
</a:pPr>
<a:endParaRPr lang="en-US"/>
</a:p>
</c:txPr>
<c:crossAx val="1188816191"/>
<c:crosses val="autoZero"/>
<c:crossBetween val="between"/>
</c:valAx>
<c:spPr>
<a:noFill/>
<a:ln>
<a:noFill/>
</a:ln>
<a:effectLst/>
</c:spPr>
</c:plotArea>
<c:plotVisOnly val="1"/>
<c:dispBlanksAs val="gap"/>
<c:extLst>
<c:ext uri="{56B9EC1D-385E-4148-901F-78D8002777C0}"
xmlns:c16r3="http://schemas.microsoft.com/office/drawing/2017/03/chart">
<c16r3:dataDisplayOptions16>
<c16r3:dispNaAsBlank val="1"/>
</c16r3:dataDisplayOptions16>
</c:ext>
</c:extLst>
<c:showDLblsOverMax val="0"/>
</c:chart>
<c:spPr>
<a:solidFill>
<a:schemeClr val="bg1"/>
</a:solidFill>
<a:ln w="9525" cap="flat" cmpd="sng" algn="ctr">
<a:solidFill>
<a:schemeClr val="tx1">
<a:lumMod val="15000"/>
<a:lumOff val="85000"/>
</a:schemeClr>
</a:solidFill>
<a:round/>
</a:ln>
<a:effectLst/>
</c:spPr>
<c:txPr>
<a:bodyPr/>
<a:lstStyle/>
<a:p>
<a:pPr>
<a:defRPr/>
</a:pPr>
<a:endParaRPr lang="en-US"/>
</a:p>
</c:txPr>
<c:printSettings>
<c:headerFooter/>
<c:pageMargins b="0.75" l="0.7" r="0.7" t="0.75" header="0.3" footer="0.3"/>
<c:pageSetup/>
</c:printSettings>
</c:chartSpace>
\ No newline at end of file
......@@ -4,20 +4,24 @@ from zipfile import ZipFile
from openpyxl.xml.functions import fromstring
from .. bar_chart import BarChart
from .. line_chart import LineChart
from .. axis import NumericAxis, DateAxis
from .. chartspace import ChartSpace
def test_read(datadir):
datadir.chdir()
from .. reader import read_chart
with open("chart1.xml") as src:
def read_chart_from_file(file_path):
from ..reader import read_chart
with open(file_path) as src:
xml = src.read()
tree = fromstring(xml)
cs = ChartSpace.from_tree(tree)
chart = read_chart(cs)
return read_chart(cs)
def test_read(datadir):
datadir.chdir()
chart = read_chart_from_file("chart1.xml")
assert isinstance(chart, LineChart)
assert chart.title.tx.rich.p[0].r[0].t == "Website Performance"
......@@ -35,3 +39,12 @@ def test_read(datadir):
assert len(chart.pivotFormats) == 1
assert chart.idx_base == 0
def test_when_reading_chart_with_no_series_then_no_error_should_be_raised(datadir):
datadir.chdir()
chart = read_chart_from_file("chart_with_no_series.xml")
assert isinstance(chart, BarChart)
assert len(chart.series) == 0
assert chart.idx_base == 0
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment