zlib.py
        ofrak_components.zlib
    
        
ZlibCompressionLevelAnalyzer            (Analyzer)
        
    
analyze(self, resource, config=None)
  
      async
  
    Analyze a resource for to extract specific ResourceAttributes.
Users should not call this method directly; rather, they should run Resource.run or Resource.analyze.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| resource | Resource | The resource that is being analyzed | required | 
| config | Optional config for analyzing. If an implementation provides a default, this default will always be used when config would otherwise be None. Note that a copy of the default config will be passed, so the default config values cannot be modified persistently by a component run. | None | 
Returns:
| Type | Description | 
|---|---|
| ZlibData | The analysis results | 
Source code in ofrak_components/zlib.py
          async def analyze(self, resource: Resource, config=None) -> ZlibData:
    zlib_data = await resource.get_data(Range(0, 2))
    flevel = zlib_data[-1]
    if flevel == 0x01:
        compression_level = 1
    elif flevel == 0x5E:
        compression_level = 2
    elif flevel == 0x9C:
        compression_level = 6
    elif flevel == 0xDA:
        compression_level = 7
    else:
        compression_level = 6
    return ZlibData(compression_level)
        
ZlibData            (GenericBinary)
        
  
      dataclass
  
    ZlibData(compression_level: int)
        
ZlibPacker            (Packer)
        
    Pack a binary with zlib
pack(self, resource, config=None)
  
      async
  
    Pack the given resource.
Users should not call this method directly; rather, they should run Resource.run or Resource.pack.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| resource | Resource | required | |
| config | Optional config for packing. If an implementation provides a default, this default will always be used when config would otherwise be None. Note that a copy of the default config will be passed, so the default config values cannot be modified persistently by a component run. | None | 
Source code in ofrak_components/zlib.py
          async def pack(self, resource: Resource, config=None):
    zlib_view = await resource.view_as(ZlibData)
    compression_level = zlib_view.compression_level
    zlib_child = await zlib_view.get_child()
    zlib_data = await zlib_child.resource.get_data()
    zlib_compressed = zlib.compress(zlib_data, compression_level)
    original_zlib_size = await zlib_view.resource.get_data_length()
    resource.queue_patch(Range(0, original_zlib_size), zlib_compressed)
        
ZlibUnpacker            (Unpacker)
        
    Decompress a blob of zlib data
unpack(self, resource, config=None)
  
      async
  
    Unpack the given resource.
Users should not call this method directly; rather, they should run Resource.run or Resource.unpack.
Parameters:
| Name | Type | Description | Default | 
|---|---|---|---|
| resource | Resource | The resource that is being unpacked | required | 
| config | Optional config for unpacking. If an implementation provides a default, this default will always be used when config would otherwise be None. Note that a copy of the default config will be passed, so the default config values cannot be modified persistently by a component run. | None | 
Source code in ofrak_components/zlib.py
          async def unpack(self, resource: Resource, config=None):
    zlib_data = await resource.get_data()
    zlib_uncompressed_data = zlib.decompress(zlib_data)
    await resource.create_child(
        tags=(GenericBinary,),
        data=zlib_uncompressed_data,
    )
