Skip to content

Commit ee465a5

Browse files
authored
Merge pull request #167 from EmbroidePy/silent-pass
Throw errors on file read/write if errors occur
2 parents 21a16d0 + 040d95d commit ee465a5

File tree

4 files changed

+44
-26
lines changed

4 files changed

+44
-26
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,8 @@ The Gcode is intended for a number of hobbyist projects that use a gcode control
221221
#### Reading from HUS:
222222
The HUS format requires an obscure and defunct form of compression. The EmbCompress performs this decompression. It is written from the ground up in pure python. It does not require any compiled element or dll file. It has no obfuscation and is intended to be easily understood.
223223

224+
### IO
225+
Starting in version 1.5.0, we no longer silently pass errors. Explicit IOErrors are raised if the writer is not supported, does not exist, or reading a file that does not exist.
224226

225227
### Reading
226228

pyembroidery/EmbPattern.py

Lines changed: 10 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1479,19 +1479,11 @@ def read_embroidery(reader, f, settings=None, pattern=None):
14791479
except AttributeError:
14801480
pass
14811481
if text_mode:
1482-
try:
1483-
with open(f, "r") as stream:
1484-
reader.read(stream, pattern, settings)
1485-
stream.close()
1486-
except IOError:
1487-
pass
1482+
with open(f, "r") as stream:
1483+
reader.read(stream, pattern, settings)
14881484
else:
1489-
try:
1490-
with open(f, "rb") as stream:
1491-
reader.read(stream, pattern, settings)
1492-
stream.close()
1493-
except IOError:
1494-
pass
1485+
with open(f, "rb") as stream:
1486+
reader.read(stream, pattern, settings)
14951487
else:
14961488
reader.read(f, pattern, settings)
14971489
return pattern
@@ -1646,17 +1638,11 @@ def write_embroidery(writer, pattern, stream, settings=None):
16461638
except AttributeError:
16471639
pass
16481640
if text_mode:
1649-
try:
1650-
with open(stream, "w") as stream:
1651-
writer.write(pattern, stream, settings)
1652-
except IOError:
1653-
pass
1641+
with open(stream, "w") as stream:
1642+
writer.write(pattern, stream, settings)
16541643
else:
1655-
try:
1656-
with open(stream, "wb") as stream:
1657-
writer.write(pattern, stream, settings)
1658-
except IOError:
1659-
pass
1644+
with open(stream, "wb") as stream:
1645+
writer.write(pattern, stream, settings)
16601646
else:
16611647
writer.write(pattern, stream, settings)
16621648

@@ -1743,16 +1729,15 @@ def static_write(pattern, filename, settings=None):
17431729
supported_extensions = [file_type["extension"] for file_type in EmbPattern.supported_formats()]
17441730

17451731
if extension not in supported_extensions:
1746-
raise Exception(f"Conversion to file type '{extension}' is not supported")
1732+
raise IOError("Conversion to file type '{extension}' is not supported".format(extension=extension))
17471733

17481734
ext_to_file_type_lookup = {file_type["extension"]: file_type for file_type in EmbPattern.supported_formats()}
17491735
writer = ext_to_file_type_lookup[extension].get("writer")
17501736

17511737
if writer:
17521738
EmbPattern.write_embroidery(writer, pattern, filename, settings)
17531739
else:
1754-
# TODO: I don't think we should pass silently!
1755-
pass
1740+
raise IOError("No supported writer found.")
17561741

17571742
@staticmethod
17581743
def is_str(obj):

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
setuptools.setup(
77
name="pyembroidery",
8-
version="1.4.38",
8+
version="1.5.0",
99
author="Tatarize",
1010
author_email="[email protected]",
1111
description="Embroidery IO library",

test/test_io.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import unittest
2+
3+
from test.pattern_for_tests import *
4+
5+
6+
class TestExplicitIOErrors(unittest.TestCase):
7+
def test_read_non_file(self):
8+
"""
9+
1.5.0 adds explicit error raising.
10+
We test that now.
11+
"""
12+
file1 = "nosuchfile.dst"
13+
self.assertRaises(IOError, lambda: EmbPattern(file1))
14+
15+
def test_write_non_supported(self):
16+
"""
17+
1.5.0 adds explicit error raising.
18+
We test that now.
19+
"""
20+
pattern = get_simple_pattern()
21+
file1 = "nosuchfile.pdf"
22+
self.assertRaises(IOError, lambda: pattern.write(file1))
23+
24+
def test_write_no_writer(self):
25+
"""
26+
1.5.0 adds explicit error raising.
27+
We test that now.
28+
"""
29+
pattern = get_simple_pattern()
30+
file1 = "nosuchfile.dat"
31+
self.assertRaises(IOError, lambda: pattern.write(file1))

0 commit comments

Comments
 (0)