Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 70efbef

Browse files
committed
Issue #13594: various fixes to aifc module; patch by Oleg Plakhotnyuk
1 parent bdd5354 commit 70efbef

2 files changed

Lines changed: 41 additions & 17 deletions

File tree

Lib/aifc.py

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -539,8 +539,7 @@ def initfp(self, file):
539539
self._aifc = 1 # AIFF-C is default
540540

541541
def __del__(self):
542-
if self._file:
543-
self.close()
542+
self.close()
544543

545544
#
546545
# User visible methods.
@@ -643,8 +642,8 @@ def setmark(self, id, pos, name):
643642
raise Error('marker ID must be > 0')
644643
if pos < 0:
645644
raise Error('marker position must be >= 0')
646-
if not isinstance(name, str):
647-
raise Error('marker name must be a string')
645+
if not isinstance(name, bytes):
646+
raise Error('marker name must be bytes')
648647
for i in range(len(self._markers)):
649648
if id == self._markers[i][0]:
650649
self._markers[i] = id, pos, name
@@ -681,19 +680,21 @@ def writeframes(self, data):
681680
self._patchheader()
682681

683682
def close(self):
684-
self._ensure_header_written(0)
685-
if self._datawritten & 1:
686-
# quick pad to even size
687-
self._file.write(b'\x00')
688-
self._datawritten = self._datawritten + 1
689-
self._writemarkers()
690-
if self._nframeswritten != self._nframes or \
691-
self._datalength != self._datawritten or \
692-
self._marklength:
693-
self._patchheader()
694-
# Prevent ref cycles
695-
self._convert = None
696-
self._file.close()
683+
if self._file:
684+
self._ensure_header_written(0)
685+
if self._datawritten & 1:
686+
# quick pad to even size
687+
self._file.write(b'\x00')
688+
self._datawritten = self._datawritten + 1
689+
self._writemarkers()
690+
if self._nframeswritten != self._nframes or \
691+
self._datalength != self._datawritten or \
692+
self._marklength:
693+
self._patchheader()
694+
# Prevent ref cycles
695+
self._convert = None
696+
self._file.close()
697+
self._file = None
697698

698699
#
699700
# Internal methods.

Lib/test/test_aifc.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,29 @@ def test_write_header_comptype_sampwidth(self):
120120
self.assertEqual(fout.getsampwidth(), 2)
121121
fout.initfp(None)
122122

123+
def test_write_markers_values(self):
124+
fout = self.fout = aifc.open(io.BytesIO(), 'wb')
125+
self.assertEqual(fout.getmarkers(), None)
126+
fout.setmark(1, 0, b'foo1')
127+
fout.setmark(1, 1, b'foo2')
128+
self.assertEqual(fout.getmark(1), (1, 1, b'foo2'))
129+
self.assertEqual(fout.getmarkers(), [(1, 1, b'foo2')])
130+
fout.initfp(None)
131+
132+
def test_read_markers(self):
133+
fout = self.fout = aifc.open(TESTFN, 'wb')
134+
fout.aiff()
135+
fout.setparams((1, 1, 1, 1, b'NONE', b''))
136+
fout.setmark(1, 0, b'odd')
137+
fout.setmark(2, 0, b'even')
138+
fout.writeframes(b'\x00')
139+
fout.close()
140+
f = self.f = aifc.open(TESTFN, 'rb')
141+
self.assertEqual(f.getmarkers(), [(1, 0, b'odd'), (2, 0, b'even')])
142+
self.assertEqual(f.getmark(1), (1, 0, b'odd'))
143+
self.assertEqual(f.getmark(2), (2, 0, b'even'))
144+
self.assertRaises(aifc.Error, f.getmark, 3)
145+
123146

124147
def test_main():
125148
run_unittest(AIFCTest)

0 commit comments

Comments
 (0)