-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathzstd_writer.py
More file actions
34 lines (26 loc) · 904 Bytes
/
zstd_writer.py
File metadata and controls
34 lines (26 loc) · 904 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import asyncio
from io import BufferedReader, BytesIO
import zstandard as zstd
class ZstdFrameWriter:
def __init__(self, raw_writer: asyncio.StreamWriter):
self.compressor = zstd.ZstdCompressor()
self.raw_writer = raw_writer
self.skip_packets = 0
self.zstd_enabled = False
def enable_zstd(self, skip_packets=0):
self.zstd_enabled = True
self.skip_packets = skip_packets
async def drain(self):
await self.raw_writer.drain()
def close(self):
self.raw_writer.close()
self.compressor = None
def write(self, data):
if not self.zstd_enabled:
self.raw_writer.write(data)
return
if self.skip_packets > 0:
self.skip_packets -= 1
self.raw_writer.write(data)
return
self.raw_writer.write(self.compressor.compress(data))