35 lines
819 B
Python
35 lines
819 B
Python
import base64
|
|
from _operator import itemgetter
|
|
from itertools import starmap
|
|
from typing import Iterable
|
|
|
|
from funcy import compose
|
|
|
|
from pyinfra.utils.func import starlift, lift
|
|
|
|
|
|
def pack_data_and_metadata_for_rest_transfer(data: Iterable, metadata: Iterable):
|
|
yield from starmap(pack, zip(data, metadata))
|
|
|
|
|
|
def unpack_fn_pack(fn):
|
|
return compose(starlift(pack), fn, lift(unpack))
|
|
|
|
|
|
def pack(data: bytes, metadata: dict):
|
|
package = {"data": bytes_to_string(data), "metadata": metadata}
|
|
return package
|
|
|
|
|
|
def unpack(package):
|
|
data, metadata = itemgetter("data", "metadata")(package)
|
|
return string_to_bytes(data), metadata
|
|
|
|
|
|
def bytes_to_string(data: bytes) -> str:
|
|
return base64.b64encode(data).decode()
|
|
|
|
|
|
def string_to_bytes(data: str) -> bytes:
|
|
return base64.b64decode(data.encode())
|