Skip to content

Commit

Permalink
Set a default pad char when a range is set for the first time (refs #127
Browse files Browse the repository at this point in the history
)
  • Loading branch information
justinfx committed Feb 15, 2024
1 parent 2c4c492 commit 01b849c
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 2 deletions.
7 changes: 7 additions & 0 deletions src/fileseq/filesequence.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ class FileSequence:
SPLIT_RE = SPLIT_RE
SPLIT_SUB_RE = SPLIT_SUB_RE

_DEFAULT_PAD_CHAR = '@'

def __init__(self,
sequence: str,
pad_style: constants._PadStyle = PAD_STYLE_DEFAULT,
Expand Down Expand Up @@ -430,6 +432,9 @@ def setFrameSet(self, frameSet: FrameSet | None):
])
self._frameSet = frameSet

if not self._pad:
self.setPadding(self._DEFAULT_PAD_CHAR)

def extension(self) -> str:
"""
Return the file extension of the sequence, including leading period.
Expand Down Expand Up @@ -485,6 +490,8 @@ def setFrameRange(self, frange):
frange (str): a properly formatted frame range, as per :class:`.FrameSet`
"""
self._frameSet = FrameSet(frange)
if not self._pad:
self.setPadding(self._DEFAULT_PAD_CHAR)

def invertedFrameRange(self) -> str:
"""
Expand Down
30 changes: 28 additions & 2 deletions test/test_unit.py
Original file line number Diff line number Diff line change
Expand Up @@ -584,7 +584,6 @@ def testBatches(self):
actual = list(FrameSet(case.input).batches(case.batch, frames=False))
self.assertListEqual(expect, actual, msg=str(case))


class TestBase(unittest.TestCase):
RX_PATHSEP = re.compile(r'[/\\]')

Expand Down Expand Up @@ -846,6 +845,31 @@ def testSetPadStyleSetZfill(self):
self.assertEqual(case.input.padding(), actual.padding(), msg=str(case))
self.assertEqual(case.expected_zfill, actual.zfill(), msg=str(case))

def testDefaultRangePadding(self):
"""
Set a default pad char when a range is set
https://github.com/justinfx/fileseq/issues/12
"""
# Should set a default pad char
fs = FileSequence("foo.exr")
self.assertEqual("", fs.padding())
fs.setFrameRange("1-3")
self.assertEqual(fs._DEFAULT_PAD_CHAR, fs.padding())
self.assertEqual(["foo1.exr", "foo2.exr", "foo3.exr"], list(fs))

# Should set a default pad char
fs = FileSequence("foo.exr")
self.assertEqual("", fs.padding())
fs.setFrameSet(FrameSet("1-3"))
self.assertEqual(fs._DEFAULT_PAD_CHAR, fs.padding())
self.assertEqual(["foo1.exr", "foo2.exr", "foo3.exr"], list(fs))

# Should not change an existing pad char
fs = FileSequence("foo.exr")
fs.setPadding("#")
fs.setFrameRange("1-3")
self.assertEqual("#", fs.padding())

def testSetFrameSet(self):
seq = FileSequence("/cheech/chong.1-5#.exr")
seq.setFrameSet(FrameSet("10-20"))
Expand Down Expand Up @@ -952,6 +976,7 @@ def testNumericFilename(self):

def testNoPlaceholder(self):
expected = "/path/to/file.mov"
expected_patt = "/path/to/file%d.mov"
seqs = FileSequence(expected)

self.assertEquals(expected, seqs.index(0))
Expand All @@ -965,10 +990,11 @@ def testNoPlaceholder(self):
seqs.setFrameRange("1-100")

for i in range(0, 100):
expected = expected_patt % (i+1)
self.assertEquals(expected, seqs.index(i))
self.assertEquals(expected, seqs.frame(i + 1))
self.assertEquals(expected, seqs[i])
self.assertEquals(1, len(seqs))
self.assertEquals(100, len(seqs))

seqs.setPadding("#")
self.assertEquals(100, len(seqs))
Expand Down

0 comments on commit 01b849c

Please sign in to comment.