class Base(object):
def __init__(self, x):
self.x = x if x else None
def start(self):
pass
def stop(self):
pass
def error(self, msg):
raise Exception(msg)
def check(self):
if self.x is None:
self.error('wrong x')
class NewFeature(Base):
AUTO_PREPARE = False
def __init__(self, x, additional=False):
super(Base, self).__init(x)
self.additional = additional
def additional_start(self):
if self.AUTO_PREPARE:
self.custom = 'xxx'
else:
self.costom = None
def additional_stop(self):
if self.AUTO_PREPARE:
self.check()
else:
if self.costom is None:
self.error('Nobody set custom')
def start(self):
super(Base, self).start()
if self.additional:
self.additional_start()
def stop(self):
if self.additional:
self.additional_stop()
super(Base, self).stop()
Y2xhc3MgQmFzZShvYmplY3QpOgoJCglkZWYgX19pbml0X18oc2VsZiwgeCk6CgkJc2VsZi54ID0geCBpZiB4IGVsc2UgTm9uZQoJCglkZWYgc3RhcnQoc2VsZik6CgkJcGFzcwoJCglkZWYgc3RvcChzZWxmKToKCQlwYXNzCgkKCWRlZiBlcnJvcihzZWxmLCBtc2cpOgoJCXJhaXNlIEV4Y2VwdGlvbihtc2cpCgkKCWRlZiBjaGVjayhzZWxmKToKCQlpZiBzZWxmLnggaXMgTm9uZToKCQkJc2VsZi5lcnJvcignd3JvbmcgeCcpCgpjbGFzcyBOZXdGZWF0dXJlKEJhc2UpOgoJCglBVVRPX1BSRVBBUkUgPSBGYWxzZQoJCglkZWYgX19pbml0X18oc2VsZiwgeCwgYWRkaXRpb25hbD1GYWxzZSk6CgkJc3VwZXIoQmFzZSwgc2VsZikuX19pbml0KHgpCgkJc2VsZi5hZGRpdGlvbmFsID0gYWRkaXRpb25hbAoJCglkZWYgYWRkaXRpb25hbF9zdGFydChzZWxmKToKCQlpZiBzZWxmLkFVVE9fUFJFUEFSRToKCQkJc2VsZi5jdXN0b20gPSAneHh4JwoJCWVsc2U6CgkJCXNlbGYuY29zdG9tID0gTm9uZQoJCglkZWYgYWRkaXRpb25hbF9zdG9wKHNlbGYpOgoJCWlmIHNlbGYuQVVUT19QUkVQQVJFOgoJCQlzZWxmLmNoZWNrKCkKCQllbHNlOgoJCQlpZiBzZWxmLmNvc3RvbSBpcyBOb25lOgoJCQkJc2VsZi5lcnJvcignTm9ib2R5IHNldCBjdXN0b20nKQoJCglkZWYgc3RhcnQoc2VsZik6CgkJc3VwZXIoQmFzZSwgc2VsZikuc3RhcnQoKQoJCWlmIHNlbGYuYWRkaXRpb25hbDoKCQkJc2VsZi5hZGRpdGlvbmFsX3N0YXJ0KCkKCQoJZGVmIHN0b3Aoc2VsZik6CgkJaWYgc2VsZi5hZGRpdGlvbmFsOgoJCQlzZWxmLmFkZGl0aW9uYWxfc3RvcCgpCgkJc3VwZXIoQmFzZSwgc2VsZikuc3RvcCgpCgkJ