docker-offlineimap/offlineimap/utils/const.py
Eygene Ryabinkin f4140cbbed Create global instance of command-line options
This eases testing of option values inside the code.  This instance
is implemented as the read-only copy of the obtained 'options' object,
so callers won't be able to modify its contents.

Signed-off-by: Eygene Ryabinkin <rea@codelabs.ru>
2013-02-11 23:34:18 +04:00

41 lines
996 B
Python

# Copyright 2013 Eygene A. Ryabinkin.
#
# Collection of classes that implement const-like behaviour
# for various objects.
import copy
class ConstProxy (object):
"""
Implements read-only access to a given object
that can be attached to each instance only once.
"""
def __init__ (self):
self.__dict__['__source'] = None
def __getattr__ (self, name):
src = self.__dict__['__source']
if src == None:
raise ValueError ("using non-initialized ConstProxy() object")
return copy.deepcopy (getattr (src, name))
def __setattr__ (self, name, value):
raise AttributeError ("tried to set '%s' to '%s' for constant object" % \
(name, value))
def __delattr__ (self, name):
raise RuntimeError ("tried to delete field '%s' from constant object" % \
(name))
def set_source (self, source):
""" Sets source object for this instance. """
if (self.__dict__['__source'] != None):
raise ValueError ("source object is already set")
self.__dict__['__source'] = source