"""
Configuration settings for node serialization.
Copyright by Gabriel A. Hackebeil (gabe.hackebeil@gmail.com).
"""
import os
import platform
import pickle
from pybnb import __version__
[docs]class Configuration(object):
"""The main configuration object.
Attributes
----------
SERIALIZER : str, {'pickle', 'dill'}
The name of serialization module used to transmit
node state. (default: "pickle")
SERIALIZER_PROTOCOL_VERSION : int
The protocol argument passed to the `dumps` function
of the selected serialization module.
(default: pickle.HIGHEST_PROTOCOL)
COMPRESSION : bool
Indicates whether or not to compress the serialized
node state using zlib. (default: False)
MARSHAL_PROTOCOL_VERSION : int
The version argument passed to the
:func:`marshal.dumps` function. (default: 2)
"""
__slots__ = ("SERIALIZER",
"SERIALIZER_PROTOCOL_VERSION",
"COMPRESSION",
"MARSHAL_PROTOCOL_VERSION")
def __init__(self):
self.reset()
[docs] def reset(self, use_environment=True):
"""Reset the configuration to default settings.
Parameters
----------
use_environment : bool, optional
Controls whether or not to check for environment
variables to overwrite the default
settings. (default: True)
"""
self.SERIALIZER = "pickle"
self.SERIALIZER_PROTOCOL_VERSION = pickle.HIGHEST_PROTOCOL
self.COMPRESSION = False
self.MARSHAL_PROTOCOL_VERSION = 2
if use_environment:
# process environment variables
prefix = "PYBNB_"
for symbol in self.__slots__:
if prefix+symbol in os.environ:
default = getattr(self, symbol)
value = os.environ[prefix+symbol]
if symbol == "COMPRESSION":
if value in ("0",
"off","Off","OFF",
"no","No","NO",
"false","False","FALSE"):
value = False
elif value in ("1",
"on","On","ON",
"yes","Yes","YES",
"true","True","TRUE"):
value = True
else:
raise ValueError(
"invalid boolean value: %s%s=%s"
% (prefix, symbol, value))
else:
value = type(default)(value)
setattr(self, symbol, value)
def __str__(self):
out = "pybnb version: %s\n" % __version__
out += ("loaded from: %s\n"
% (os.path.dirname(__file__)))
out += ("python version: %s %s (%s, %s)\n"
% (platform.python_implementation(),
platform.python_version(),
platform.system(),
os.name))
out += "configuration:"
for key in self.__slots__:
out += ("\n - %s: %s" % (key,
getattr(self, key)))
return out
config = Configuration()
if __name__ == "__main__": #pragma:nocover
print(config)