def fromvalidatedwalker(cls, w, **kwArgs): """ Like fromwalker(), this method returns a new OS_2. However, it also does extensive validation via the logging module (the client should have done a logging.basicConfig call prior to calling this method, unless a logger is passed in via the 'logger' keyword argument). """ logger = kwArgs.get('logger', None) assert logger is not None # we're only called via factory logger.debug( ('V0001', (w.length(), ), "Walker has %d remaining bytes.")) if w.length() < 68: logger.error(('E2127', (), "Insufficient bytes")) return None ver = w.unpack("H") if ver != 0: logger.error(('V0002', (), "Expected version 0")) return None v = [ver] okToReturn = True v.extend(w.unpack("H2h")) obj = typeflags_v0.TypeFlags.fromvalidatedwalker(w, **kwArgs) if obj is None: okToReturn = False v.append(obj) v.extend(w.unpack("10hH")) obj = panose.Panose_validated(w, os2panver=0, **kwArgs) if obj is None: okToReturn = False v.append(obj) v.append(w.unpack("16x4s")) obj = selection_v0.Selection.fromvalidatedwalker(w, **kwArgs) if obj is None: okToReturn = False v.append(obj) v.extend(w.unpack("2H")) return (cls(*v) if okToReturn else None)
def fromvalidatedwalker(cls, w, **kwArgs): """ Like fromwalker(), this method returns a new OS_2. However, it also does extensive validation via the logging module (the client should have done a logging.basicConfig call prior to calling this method, unless a logger is passed in via the 'logger' keyword argument). """ logger = kwArgs.get('logger', None) assert logger is not None # we're only called via factory logger.debug( ('V0001', (w.length(), ), "Walker has %d remaining bytes.")) if w.length() < 100: logger.error(('E2127', (), "Insufficient bytes")) return None ver = w.unpack("H") if ver != 5: logger.error(('V0002', (), "Expected version 5")) return None v = [ver] okToReturn = True v.extend(w.unpack("H2h")) v.append(typeflags_v3.TypeFlags.fromvalidatedwalker(w, **kwArgs)) if v[-1] is None: okToReturn = False v.extend(w.unpack("10hH")) v.append(panose.Panose_validated(w, **kwArgs)) if v[-1] is None: okToReturn = False v.append( unicoderanges_v4.UnicodeRanges.fromvalidatedwalker(w, **kwArgs)) if v[-1] is None: okToReturn = False v.append(w.unpack("4s")) v.append(selection_v4.Selection.fromvalidatedwalker(w, **kwArgs)) if v[-1] is None: okToReturn = False v.extend(w.unpack("2H3h2H")) v.append( codepageranges_v2.CodePageRanges.fromvalidatedwalker(w, **kwArgs)) if v[-1] is None: okToReturn = False v.extend(w.unpack("2h3H")) v.extend(n / 20 for n in w.unpack("2H")) return (cls(*v) if okToReturn else None)
def fromvalidatedwalker(cls, w, **kwArgs): r""" Like fromwalker(), this method returns a new OS_2. However, it also does extensive validation via the logging module (the client should have done a logging.basicConfig call prior to calling this method, unless a logger is passed in via the 'logger' keyword argument). >>> fvw = OS_2.fromvalidatedbytes >>> logger = utilities.makeDoctestLogger("OS/2") >>> s = _testingValues[1].binaryString() >>> obj = fvw(s, logger=logger) OS/2 - DEBUG - Walker has 96 remaining bytes. >>> sbad = s[0:62] + b'\x12\x02' + s[64:] # bad fsSelection >>> obj = fvw(sbad, logger=logger) OS/2 - DEBUG - Walker has 96 remaining bytes. OS/2.fsselection - ERROR - All reserved bits should be set to 0, but some are 1. """ logger = kwArgs.get('logger', None) assert logger is not None # we're only called via factory logger.debug( ('V0001', (w.length(), ), "Walker has %d remaining bytes.")) if w.length() < 96: logger.error(('E2127', (), "Insufficient bytes")) return None ver = w.unpack("H") if ver != 4: logger.error(('V0002', (), "Expected version 4")) return None v = [ver] okToReturn = True v.extend(w.unpack("H2h")) v.append(typeflags_v3.TypeFlags.fromvalidatedwalker(w, **kwArgs)) if v[-1] is None: okToReturn = False v.extend(w.unpack("10hH")) v.append(panose.Panose_validated(w, **kwArgs)) if v[-1] is None: okToReturn = False v.append( unicoderanges_v4.UnicodeRanges.fromvalidatedwalker(w, **kwArgs)) if v[-1] is None: okToReturn = False v.append(w.unpack("4s")) v.append(selection_v4.Selection.fromvalidatedwalker(w, **kwArgs)) if v[-1] is None: okToReturn = False v.extend(w.unpack("2H3h2H")) v.append( codepageranges_v2.CodePageRanges.fromvalidatedwalker(w, **kwArgs)) if v[-1] is None: okToReturn = False v.extend(w.unpack("2h3H")) return (cls(*v) if okToReturn else None)