Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def testMaxFrameSize(self):
_maxSize = constants.MAX_FRAME_SIZE
try:
maxSize = constants.MAX_FRAME_SIZE = 500
# Within range
utils.xfrange(1, 100, 1, maxSize=-1)
utils.xfrange(1, 100, 1, maxSize=100)
FrameSet('1-%d' % maxSize)
# Should not be allowed
self.assertRaises(exceptions.MaxSizeException, utils.xfrange, 1, 100, 1, maxSize=50)
self.assertRaises(exceptions.MaxSizeException, FrameSet, '1-%d' % (maxSize + 1))
# Inverting would produce a huge new range
fs = FrameSet('1,%d' % (maxSize + 3))
self.assertRaises(exceptions.MaxSizeException, fs.invertedFrameRange)
finally:
constants.MAX_FRAME_SIZE = _maxSize
def __init__(self, sequence):
"""Init the class
"""
sequence = utils.asString(sequence)
if not hasattr(self, '_frameSet'):
self._frameSet = None
try:
# the main case, padding characters in the path.1-100#.exr
path, frames, self._pad, self._ext = SPLIT_RE.split(sequence, 1)
self._dir, self._base = os.path.split(path)
self._frameSet = FrameSet(frames)
except ValueError:
# edge case 1; we've got an invalid pad
for placeholder in PAD_MAP:
if placeholder in sequence:
msg = "Failed to parse FileSequence: {0}"
raise ParseException(msg.format(sequence))
self._order, sort=False, compress=False)
return
# if it's ordered, find unique and build
elif isinstance(frange, Sequence):
self._maxSizeCheck(frange)
items = set()
order = unique(items, map(int, frange))
self._order = tuple(order)
self._items = frozenset(items)
self._frange = FrameSet.framesToFrameRange(
self._order, sort=False, compress=False)
return
# in all other cases, cast to a string
else:
try:
frange = utils.asString(frange)
except Exception as err:
msg = 'Could not parse "{0}": cast to string raised: {1}'
raise ParseException(msg.format(frange, err))
# we're willing to trim padding characters from consideration
# this translation is orders of magnitude faster than prior method
if future.utils.PY2:
frange = bytes(frange).translate(None, ''.join(PAD_MAP.keys()))
self._frange = utils.asString(frange)
else:
frange = str(frange)
for key in PAD_MAP:
frange = frange.replace(key, '')
self._frange = utils.asString(frange)
# because we're acting like a set, we need to support the empty set
self._frange = FrameSet.framesToFrameRange(
self._order, sort=False, compress=False)
return
# in all other cases, cast to a string
else:
try:
frange = utils.asString(frange)
except Exception as err:
msg = 'Could not parse "{0}": cast to string raised: {1}'
raise ParseException(msg.format(frange, err))
# we're willing to trim padding characters from consideration
# this translation is orders of magnitude faster than prior method
if future.utils.PY2:
frange = bytes(frange).translate(None, ''.join(PAD_MAP.keys()))
self._frange = utils.asString(frange)
else:
frange = str(frange)
for key in PAD_MAP:
frange = frange.replace(key, '')
self._frange = utils.asString(frange)
# because we're acting like a set, we need to support the empty set
if not self._frange:
self._items = frozenset()
self._order = tuple()
return
# build the mutable stores, then cast to immutable for storage
items = set()
order = []
def yield_sequences_in_list(paths):
"""
Yield the discrete sequences within paths. This does not try to
determine if the files actually exist on disk, it assumes you already
know that.
Args:
paths (list[str]): a list of paths
Yields:
:obj:`FileSequence`:
"""
seqs = {}
_check = DISK_RE.match
for match in filter(None, map(_check, map(utils.asString, paths))):
dirname, basename, frame, ext = match.groups()
if not basename and not ext:
continue
key = (dirname, basename, ext)
seqs.setdefault(key, set())
if frame:
seqs[key].add(frame)
for (dirname, basename, ext), frames in iteritems(seqs):
# build the FileSequence behind the scenes, rather than dupe work
seq = FileSequence.__new__(FileSequence)
seq._dir = dirname or ''
seq._base = basename or ''
seq._ext = ext or ''
if frames:
seq._frameSet = FrameSet(set(map(int, frames))) if frames else None