|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""API metadata conversion utilities.""" |
|
|
|
import collections |
|
|
|
_Metadatum = collections.namedtuple('_Metadatum', ( |
|
'key', |
|
'value', |
|
)) |
|
|
|
|
|
def _beta_metadatum(key, value): |
|
beta_key = key if isinstance(key, (bytes,)) else key.encode('ascii') |
|
beta_value = value if isinstance(value, (bytes,)) else value.encode('ascii') |
|
return _Metadatum(beta_key, beta_value) |
|
|
|
|
|
def _metadatum(beta_key, beta_value): |
|
key = beta_key if isinstance(beta_key, (str,)) else beta_key.decode('utf8') |
|
if isinstance(beta_value, (str,)) or key[-4:] == '-bin': |
|
value = beta_value |
|
else: |
|
value = beta_value.decode('utf8') |
|
return _Metadatum(key, value) |
|
|
|
|
|
def beta(metadata): |
|
if metadata is None: |
|
return () |
|
else: |
|
return tuple(_beta_metadatum(key, value) for key, value in metadata) |
|
|
|
|
|
def unbeta(beta_metadata): |
|
if beta_metadata is None: |
|
return () |
|
else: |
|
return tuple( |
|
_metadatum(beta_key, beta_value) |
|
for beta_key, beta_value in beta_metadata) |
|
|