<filename>recipes/Python/577327_Attributebased_Framework_1/recipe-577327.py
import os
import os.path
import re

" RecipeUnpacker recreates a group of Python modules into current directory. "
" See http://code.activestate.com/recipes/577297-consolidate-group-of-modules-into-one-recipe/?in=lang-python "
__author__=["<NAME> (<EMAIL>)",]
__version__="2010-07-20"
client_PY = """from shipping import *
import instance

__author__=[%DQ%<NAME> (<EMAIL>)%DQ%,]
__version__=%DQ%2010-07-20%DQ%

class Tester(object):
    def __init__(self):
        self.__mgr = None
        self.__count = 0
        self.__successes = 0

    def setup(self):
        self.__mgr = instance.ShippingInstanceMgr()
        pass

    def takedown(self):
        self.__mgr = None

    def mgr(self):
        return self.__mgr

    def test(self, result):
        self.__count += 1
        if result:
            self.__successes += 1
        else:
            self.__successes += 0 # for breakpoint

    def test_bool(self, result, flag):
        self.test(result == flag)

    def test_instance_new(self, name_, type_):
        instance_ = self.mgr().instance_new(name_, type_)
        self.test(instance_ != None)
        if instance_:
            self.test(instance_.name() == name_)
            self.test(instance_.type() == type_)
        return instance_

    def test_attribute(self, instance_, key, val, flag=True):
        instance_.attribute_is(key, val)
        self.test_bool(instance_.attribute(key) == val, flag)

    def test_readonly_attribute(self, instance_, key, expected):
        val = instance_.attribute(key)
        self.test(val == expected)

    def test_manager(self):
        self.setup()
        self.test(self.mgr() != None)
        self.takedown()

    def test_location(self):
        self.setup()
        a = %DQ%a%DQ%
        instance_ = self.test_instance_new(a, LOCATION_TYPE)
        self.test_readonly_attribute(instance_, LOC_SHIPMENT_COUNT_ATTR, %DQ%0%DQ%)
        self.takedown()

    def test_origin(self):
        self.setup()
        a = %DQ%a%DQ%
        instance_ = self.test_instance_new(a, ORIGIN_TYPE)
        self.test_attribute(instance_, ORG_DESTINATION_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, ORG_SHIPMENT_COMPLETE_ATTR, %DQ%xxx%DQ%)
        self.test_readonly_attribute(instance_, ORG_NEXT_SHIPMENT_NAME_ATTR, %DQ%Ship:a:1%DQ%)
        self.takedown()

    def test_segment(self):
        self.setup()
        a = %DQ%a%DQ%
        instance_ = self.test_instance_new(a, SEGMENT_TYPE)
        self.test_attribute(instance_, SEG_SOURCE_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, SEG_DESTINATION_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, SEG_DISTANCE_ATTR, %DQ%10.00%DQ%)

        self.takedown()

    def test_shipment(self):
        self.setup()
        a = %DQ%a%DQ%
        instance_ = self.test_instance_new(a, SHIPMENT_TYPE)
        self.test_attribute(instance_, SHP_DESTINATION_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, SHP_ORIGIN_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, SHP_LOCATION_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, SHP_SEGMENT_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, SHP_SPEED_ATTR, %DQ%60.00%DQ%)
        
        self.takedown()

    def test_deletion(self, type_):      
        a = %DQ%a%DQ%
        inst_a = self.mgr().instance_new(a, type_)        
        self.mgr().instance_del(a)
        inst_a = self.mgr().instance(a)  
        self.test(inst_a == None)      
        
    def test_deletions(self):
        self.setup()
        self.test_deletion(LOCATION_TYPE)
        self.test_deletion(ORIGIN_TYPE)
        self.test_deletion(SEGMENT_TYPE)
        self.test_deletion(SHIPMENT_TYPE)
        self.takedown()

    def execute(self):
        print %DQ%Tester.execute()...%DQ%
        self.test_manager()
        self.test_location()
        self.test_origin()
        self.test_segment()
        self.test_shipment()
        self.test_deletions()
        self.report()

    def report(self):
        print %DQ%Tester:%DQ%, self.__successes, %DQ%out of%DQ%, self.__count,%DQ%tests.%DQ%
        if (self.__successes != self.__count):
            print %DQ%Tester: FAILED.%DQ%

def main():
    Tester().execute()
    raw_input(%DQ%Press RETURN...%DQ%)

if __name__ == %DQ%__main__%DQ%:
    print __file__
    main()
    
"""

engine_PY = """import sys
from shipping import *

class Engine(object):
    def __init__(self):
        self.__next_shipment_connector = %DQ%%DQ%
        self.__instance_eng = {}

    def activity_mgr(self):
        return self.__activity_mgr
    
    def instance_eng_new(self, name_, type_):
        import instance_eng
        import location
        import origin
        import segment
        import shipment
        
        instance_eng_ = self.instance_eng(name_)
        if not instance_eng_:
            if type_ == LOCATION_TYPE:
                instance_eng_ = location.Location(name_, type_, self)
            elif type_ == SEGMENT_TYPE:
                instance_eng_ = segment.Segment(name_, type_, self)
            elif type_ == SHIPMENT_TYPE:
                instance_eng_ = shipment.Shipment(name_, type_, self)
            elif type_ == ORIGIN_TYPE:
                instance_eng_ = origin.Origin(name_, type_, self)
            else:
                sys.stderr.write(%DQ%Engine.instance_eng_new: no such type %s.%SLASH%n%DQ% % type_)
            
            if instance_eng_:
                self.__instance_eng[name_] = instance_eng_
            else:
                sys.stderr.write(%DQ%Engine.instance_eng_new: failed to create %s of type %s.%SLASH%n%DQ% % (name_, type_))
        else:
            sys.stderr.write(%DQ%Engine.instance_eng_new: %s already exists.%SLASH%n%DQ% % name_)
        return instance_eng_
    
    def instance_eng(self, name_):
        instance_eng_ = self.__instance_eng.get(name_, None)
        return instance_eng_
    
    def instance_eng_del(self, name_):
        instance_eng_ = self.instance_eng(name_)
        if instance_eng_:
            del self.__instance_eng[name_]


"""

instance_PY = """def abstract(): # run-time emulation of C++ abstract method -- forces error if subclass doesn%SQ%t override
    import inspect
    caller = inspect.getouterframes(inspect.currentframe())[1][3]
    raise NotImplementedError(caller + %SQ% must be implemented in subclass%SQ%)

class Instance(object):
    def __init__(self, name_, type_):
        self.__name = name_
        self.__type = type_
        
    def name(self):
        return self.__name
    
    def type(self):
        return self.__type
    
    def attribute(self, key):           abstract()
    def attribute_is(self, key, val):   abstract()

    class Manager(object):
        def __init__(self):
            pass
        
        def instance(self, name_):              abstract()               
        def instance_new(self, name_, type_):   abstract()
        def instance_del(self, name_):          abstract()


def ShippingInstanceMgr():
    import instance_impl
    return instance_impl.ManagerImpl()

"""

instance_eng_PY = """from shipping import *
import instance

class InstanceEng(object):
    def __init__(self, name_, type_, engine_):
        self.__name = name_
        self.__type = type_
        self.__engine = engine_
    
    def name(self):
        return self.__name

    def type(self):
        return self.__type

    def engine(self):
        return self.__engine


"""

instance_impl_PY = """import sys
from shipping import *
import instance
import engine

class ManagerImpl(instance.Instance.Manager):
    def __init__(self):
        self.__instance = {}
        self.__engine = engine.Engine()

    
    def engine(self):
        return self.__engine 
    
    def instance(self, name_):
        return self.__instance.get(name_, None)
            
    def instance_new(self, name_, type_):
        import location_rep
        import origin_rep
        import segment_rep
        import shipment_rep
        
        instance_ = self.instance(name_)        
        if not instance_:
            self.engine().instance_eng_new(name_, type_)
            if type_ == LOCATION_TYPE:
                instance_ = location_rep.LocationRep(name_, type_, self)
            elif type_ == ORIGIN_TYPE:
                instance_ = origin_rep.OriginRep(name_, type_, self)
            elif type_ == SEGMENT_TYPE:
                instance_ = segment_rep.SegmentRep(name_, type_, self)
            elif type_ == SHIPMENT_TYPE:
                instance_ = shipment_rep.ShipmentRep(name_, type_, self)
            else:
                sys.stderr.write(%DQ%ManagerImpl.instance_new: no such type %s.%SLASH%n%DQ% % type_)
            
            if instance_:
                self.__instance[name_] = instance_
            else:
                sys.stderr.write(%DQ%ManagerImpl.instance_new: failed to create %s of type %s.%SLASH%n%DQ% % (name_, type_))
        else:
            sys.stderr.write(%DQ%ManagerImpl.instance_new: %s already exists.%SLASH%n%DQ% % name_)
        return instance_       
    
    def instance_del(self, name_):
        instance_ = self.instance(name_)
        if instance_:
            del self.__instance[name_]
            self.engine().instance_eng_del(name_)

class InstanceImpl(instance.Instance):
    def __init__(self, name_, type_, mgr_):
        instance.Instance.__init__(self, name_, type_)
        self.__mgr = mgr_
        self.__name = name_
        self.__type = type_
        
    def name(self):
        return self.__name
    
    def type(self):
        return self.__type
        
    def mgr(self):
        return self.__mgr
    
    def engine(self):
        return self.mgr().engine()
    
    def attribute(self, key):          instance.abstract()       
    def attribute_is(self, key, val):  instance.abstract()

    def attribute_err(self, key):
        sys.stderr.write(%SQ%Can%SLASH%%SQ%t read %DQ%%s%DQ% attribute of %DQ%%s%DQ%%SLASH%n%SQ% % (key, self.name))

    def attribute_is_err(self, key, val):
        sys.stderr.write(%SQ%Can%SLASH%%SQ%t write %DQ%%s%DQ% to %s%DQ% attribute of %DQ%%s%DQ%%SLASH%n%SQ% % (val, key, self.name))

if __name__ == %DQ%__main__%DQ%:
    print __file__

"""

location_PY = """from shipping import *
import engine
import instance_eng

class Location(instance_eng.InstanceEng):
    def __init__(self, name_, type_, engine_):
        instance_eng.InstanceEng.__init__(self, name_, type_, engine_)
        self.__shipment_count = 0 

    def shipment_count(self):
        return self.__shipment_count
    
    def shipment_count_inc(self):
        self.shipment_count_is(self.__shipment_count + 1)
        
    def shipment_count_is(self, val):
        if self.__shipment_count != val:
            self.__shipment_count = val

"""

location_rep_PY = """from shipping import *
import instance_impl
import location

class LocationRep(instance_impl.InstanceImpl):
    def __init__(self, name_, type_, mgr_):
        instance_impl.InstanceImpl.__init__(self, name_, type_, mgr_)
        
    def attribute(self, key):
        location_ = self.mgr().engine().instance_eng(self.name())
        if key is LOC_SHIPMENT_COUNT_ATTR:
            return str(location_.shipment_count())
        else:
            self.attribute_err(key)
        return %DQ%%DQ%

    def attribute_is(self, key, val):
        self.attribute_is_err(key, val)
                        

"""

origin_PY = """from shipping import *
import engine
import location

class Origin(location.Location):
    def __init__(self, name_, type_, engine_):
        location.Location.__init__(self, name_, type_, engine_)
#        self.__shipment_arrived = %DQ%%DQ%
        self.__shipment_complete = %DQ%%DQ%
        self.__destination = %DQ%%DQ%
        self.__shipment_id = 0

    def next_shipment_name(self):
        self.__shipment_id += 1
        return %DQ%%s:%s:%d%DQ% % (%DQ%Ship%DQ%, self.name(), self.__shipment_id)

    def destination(self):
        return self.__destination
    
    def destination_is(self, val):
        if self.__destination != val:
            self.__destination = val
        
    def shipment_complete(self):
        return self.__shipment_complete
    
    def shipment_complete_is(self, val):
        if self.__shipment_complete != val:
            self.__shipment_complete = val

"""

origin_rep_PY = """from shipping import *
import location_rep
import origin

class OriginRep(location_rep.LocationRep):
    def __init__(self, name_, type_, mgr_):
        location_rep.LocationRep.__init__(self, name_, type_, mgr_)

    def attribute(self, key):
        origin_ = self.mgr().engine().instance_eng(self.name())
        if key is ORG_DESTINATION_ATTR:
            return origin_.destination()
        elif key is ORG_NEXT_SHIPMENT_NAME_ATTR:
            return origin_.next_shipment_name()
        elif key is ORG_SHIPMENT_COMPLETE_ATTR:
            return origin_.shipment_complete()
        else:
            return location_rep.LocationRep.attribute(self, key)
        return %DQ%%DQ%
    
    def attribute_is(self, key, val):
        origin_ = self.mgr().engine().instance_eng(self.name())
        if key is ORG_DESTINATION_ATTR:
            origin_.destination_is(val)
        elif key is ORG_SHIPMENT_COMPLETE_ATTR:
            origin_.shipment_complete_is(val)
        else:
            location_rep.LocationRep.attribute_is(self, key, val)
                        

"""

segment_PY = """from shipping import *
import engine
import instance_eng

class Segment(instance_eng.InstanceEng):
    def __init__(self, name_, type_, engine_):
        instance_eng.InstanceEng.__init__(self, name_, type_, engine_)
        self.__source = %DQ%%DQ%
        self.__destination = %DQ%%DQ%
        self.__distance = 0

    def source(self):
        return self.__source

    def source_is(self, val):
        if self.__source != val:
            self.__source = val

    def destination(self):
        return self.__destination

    def destination_is(self, val):
        if self.__destination != val:
            self.__destination = val

    def distance(self):
        return self.__distance

    def distance_is(self, val):
        if self.__distance != val:
            self.__distance = val


"""

segment_rep_PY = """from shipping import *
import instance_impl
import segment

class SegmentRep(instance_impl.InstanceImpl):
    def __init__(self, name_, type_, mgr_):
        instance_impl.InstanceImpl.__init__(self, name_, type_, mgr_)
        
    def attribute(self, key):
        segment_ = self.mgr().engine().instance_eng(self.name())
        if key == SEG_SOURCE_ATTR:
            return segment_.source()
        elif key == SEG_DESTINATION_ATTR:
            return segment_.destination()
        elif key == SEG_DISTANCE_ATTR:
            return %DQ%%.2f%DQ% % segment_.distance()
        else:
            self.attribute_err(key)
        return %DQ%%DQ%

    def attribute_is(self, key, val):
        segment_ = self.mgr().engine().instance_eng(self.name())
        if key == SEG_SOURCE_ATTR:
            segment_.source_is(val)
        elif key == SEG_DESTINATION_ATTR:
            segment_.destination_is(val)
        elif key == SEG_DISTANCE_ATTR:
            segment_.distance_is(float(val))
        else:
            self.attribute_is_err(key, val)

"""

shipment_PY = """from shipping import *
import engine
import instance_eng

class Shipment(instance_eng.InstanceEng):
    def __init__(self, name_, type_, engine_):
        instance_eng.InstanceEng.__init__(self, name_, type_, engine_)   
        self.__destination = %DQ%%DQ%
        self.__origin = %DQ%%DQ%
        self.__location = %DQ%%DQ%
        self.__segment = %DQ%%DQ%
        self.__speed = 1.0

    def destination(self):
        return self.__destination

    def destination_is(self, val):
        if self.__destination != val:
            self.__destination = val

    def origin(self):
        return self.__origin

    def origin_is(self, val):
        if self.__origin != val:
            self.__origin = val

    def location(self):
        return self.__location

    def location_is(self, val):
        if self.__location != val:
            self.__location = val

    def segment(self):
        return self.__segment

    def segment_is(self, val):
        if self.__segment != val:
            self.__segment = val
          
    def speed(self):
        return self.__speed

    def speed_is(self, val):
        if self.__speed != val:
            self.__speed = val
          

"""

shipment_rep_PY = """from shipping import *
import instance_impl
import shipment

class ShipmentRep(instance_impl.InstanceImpl):
    def __init__(self, name_, type_, mgr_):
        instance_impl.InstanceImpl.__init__(self, name_, type_, mgr_)

    def attribute(self, key):
        shipment_ = self.mgr().engine().instance_eng(self.name())
        if key == SHP_DESTINATION_ATTR:
            return shipment_.destination()
        elif key == SHP_ORIGIN_ATTR:
            return shipment_.origin()
        elif key == SHP_LOCATION_ATTR:
            return shipment_.location()
        elif key == SHP_SEGMENT_ATTR:
            return shipment_.segment()
        elif key == SHP_SPEED_ATTR:
            return %DQ%%.2f%DQ% % shipment_.speed()
        else:
            self.attribute_err(key)
        return %DQ%%DQ%

    def attribute_is(self, key, val):
        shipment_ = self.mgr().engine().instance_eng(self.name())
        if key == SHP_DESTINATION_ATTR:
            shipment_.destination_is(val)
        elif key == SHP_ORIGIN_ATTR:
            shipment_.origin_is(val)
        elif key == SHP_LOCATION_ATTR:
            shipment_.location_is(val)
        elif key == SHP_SEGMENT_ATTR:
            shipment_.segment_is(val)
        elif key == SHP_SPEED_ATTR:
            shipment_.speed_is(float(val))
        else:
            self.attribute_is_err(key, val)

"""

shipping_PY = """LOCATION_TYPE = %DQ%Location%DQ%
LOC_SHIPMENT_COUNT_ATTR = %DQ%Shipment count%DQ%

ORIGIN_TYPE = %DQ%Origin%DQ%
ORG_DESTINATION_ATTR = %DQ%Destination%DQ%
ORG_NEXT_SHIPMENT_NAME_ATTR = %DQ%Next shipment name%DQ%
ORG_SHIPMENT_COMPLETE_ATTR = %DQ%Shipment complete%DQ%

SEGMENT_TYPE = %DQ%Segment%DQ%
SEG_SOURCE_ATTR = %DQ%Source%DQ%
SEG_DESTINATION_ATTR = %DQ%Destination%DQ%
SEG_DISTANCE_ATTR = %DQ%Distance%DQ%

SHIPMENT_TYPE = %DQ%Shipment%DQ%
SHP_DESTINATION_ATTR = %DQ%Destination%DQ%
SHP_ORIGIN_ATTR = %DQ%Origin%DQ%
SHP_LOCATION_ATTR = %DQ%Location%DQ%
SHP_SEGMENT_ATTR = %DQ%Segment%DQ%
SHP_SPEED_ATTR = %DQ%Speed%DQ%

"""


class RecipeUnpacker(object):
    SQUOTE_ESCAPE = "%SQ%"
    DQUOTE_ESCAPE = "%DQ%"
    SLASH_ESCAPE = "%SLASH%"
    TRIPLE_SQUOTE_ESCAPE = "%SQSQSQ%"
    TRIPLE_DQUOTE_ESCAPE = "%DQDQDQ%"
    def __init__(self, dir=None):
        self.dir = dir
        if not self.dir:
            self.dir = os.getcwd()            
        if not os.path.exists(self.dir):
            os.makedirs(self.dir)

    def execute(self):
        os.chdir(self.dir)
        for key in globals():
            match = re.match(("^([A-Za-z0-9_]+)_PY$"), key)
            if match:
                file_name = "%s.py" % match.group(1)
                path = os.path.join(self.dir, file_name)
                print "Unpacking %s ..." % path 
                src = globals()[key]
                src = src.replace(RecipeUnpacker.TRIPLE_SQUOTE_ESCAPE, "'''")
                src = src.replace(RecipeUnpacker.TRIPLE_DQUOTE_ESCAPE, '"""')
                src = src.replace(RecipeUnpacker.SQUOTE_ESCAPE, "'")
                src = src.replace(RecipeUnpacker.DQUOTE_ESCAPE, '"')
                src = src.replace(RecipeUnpacker.SLASH_ESCAPE, "\\")
                open(path, "w").write(src)
        
if __name__ == "__main__":
    print __file__
    RecipeUnpacker().execute()
    raw_input("RecipeUnpacker complete. Press RETURN...") 

<filename>recipes/Python/577327_Attributebased_Framework_1/recipe-577327.py
import os
import os.path
import re

" RecipeUnpacker recreates a group of Python modules into current directory. "
" See http://code.activestate.com/recipes/577297-consolidate-group-of-modules-into-one-recipe/?in=lang-python "
__author__=["<NAME> (<EMAIL>)",]
__version__="2010-07-20"
client_PY = """from shipping import *
import instance

__author__=[%DQ%<NAME> (<EMAIL>)%DQ%,]
__version__=%DQ%2010-07-20%DQ%

class Tester(object):
    def __init__(self):
        self.__mgr = None
        self.__count = 0
        self.__successes = 0

    def setup(self):
        self.__mgr = instance.ShippingInstanceMgr()
        pass

    def takedown(self):
        self.__mgr = None

    def mgr(self):
        return self.__mgr

    def test(self, result):
        self.__count += 1
        if result:
            self.__successes += 1
        else:
            self.__successes += 0 # for breakpoint

    def test_bool(self, result, flag):
        self.test(result == flag)

    def test_instance_new(self, name_, type_):
        instance_ = self.mgr().instance_new(name_, type_)
        self.test(instance_ != None)
        if instance_:
            self.test(instance_.name() == name_)
            self.test(instance_.type() == type_)
        return instance_

    def test_attribute(self, instance_, key, val, flag=True):
        instance_.attribute_is(key, val)
        self.test_bool(instance_.attribute(key) == val, flag)

    def test_readonly_attribute(self, instance_, key, expected):
        val = instance_.attribute(key)
        self.test(val == expected)

    def test_manager(self):
        self.setup()
        self.test(self.mgr() != None)
        self.takedown()

    def test_location(self):
        self.setup()
        a = %DQ%a%DQ%
        instance_ = self.test_instance_new(a, LOCATION_TYPE)
        self.test_readonly_attribute(instance_, LOC_SHIPMENT_COUNT_ATTR, %DQ%0%DQ%)
        self.takedown()

    def test_origin(self):
        self.setup()
        a = %DQ%a%DQ%
        instance_ = self.test_instance_new(a, ORIGIN_TYPE)
        self.test_attribute(instance_, ORG_DESTINATION_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, ORG_SHIPMENT_COMPLETE_ATTR, %DQ%xxx%DQ%)
        self.test_readonly_attribute(instance_, ORG_NEXT_SHIPMENT_NAME_ATTR, %DQ%Ship:a:1%DQ%)
        self.takedown()

    def test_segment(self):
        self.setup()
        a = %DQ%a%DQ%
        instance_ = self.test_instance_new(a, SEGMENT_TYPE)
        self.test_attribute(instance_, SEG_SOURCE_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, SEG_DESTINATION_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, SEG_DISTANCE_ATTR, %DQ%10.00%DQ%)

        self.takedown()

    def test_shipment(self):
        self.setup()
        a = %DQ%a%DQ%
        instance_ = self.test_instance_new(a, SHIPMENT_TYPE)
        self.test_attribute(instance_, SHP_DESTINATION_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, SHP_ORIGIN_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, SHP_LOCATION_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, SHP_SEGMENT_ATTR, %DQ%xxx%DQ%)
        self.test_attribute(instance_, SHP_SPEED_ATTR, %DQ%60.00%DQ%)
        
        self.takedown()

    def test_deletion(self, type_):      
        a = %DQ%a%DQ%
        inst_a = self.mgr().instance_new(a, type_)        
        self.mgr().instance_del(a)
        inst_a = self.mgr().instance(a)  
        self.test(inst_a == None)      
        
    def test_deletions(self):
        self.setup()
        self.test_deletion(LOCATION_TYPE)
        self.test_deletion(ORIGIN_TYPE)
        self.test_deletion(SEGMENT_TYPE)
        self.test_deletion(SHIPMENT_TYPE)
        self.takedown()

    def execute(self):
        print %DQ%Tester.execute()...%DQ%
        self.test_manager()
        self.test_location()
        self.test_origin()
        self.test_segment()
        self.test_shipment()
        self.test_deletions()
        self.report()

    def report(self):
        print %DQ%Tester:%DQ%, self.__successes, %DQ%out of%DQ%, self.__count,%DQ%tests.%DQ%
        if (self.__successes != self.__count):
            print %DQ%Tester: FAILED.%DQ%

def main():
    Tester().execute()
    raw_input(%DQ%Press RETURN...%DQ%)

if __name__ == %DQ%__main__%DQ%:
    print __file__
    main()
    
"""

engine_PY = """import sys
from shipping import *

class Engine(object):
    def __init__(self):
        self.__next_shipment_connector = %DQ%%DQ%
        self.__instance_eng = {}

    def activity_mgr(self):
        return self.__activity_mgr
    
    def instance_eng_new(self, name_, type_):
        import instance_eng
        import location
        import origin
        import segment
        import shipment
        
        instance_eng_ = self.instance_eng(name_)
        if not instance_eng_:
            if type_ == LOCATION_TYPE:
                instance_eng_ = location.Location(name_, type_, self)
            elif type_ == SEGMENT_TYPE:
                instance_eng_ = segment.Segment(name_, type_, self)
            elif type_ == SHIPMENT_TYPE:
                instance_eng_ = shipment.Shipment(name_, type_, self)
            elif type_ == ORIGIN_TYPE:
                instance_eng_ = origin.Origin(name_, type_, self)
            else:
                sys.stderr.write(%DQ%Engine.instance_eng_new: no such type %s.%SLASH%n%DQ% % type_)
            
            if instance_eng_:
                self.__instance_eng[name_] = instance_eng_
            else:
                sys.stderr.write(%DQ%Engine.instance_eng_new: failed to create %s of type %s.%SLASH%n%DQ% % (name_, type_))
        else:
            sys.stderr.write(%DQ%Engine.instance_eng_new: %s already exists.%SLASH%n%DQ% % name_)
        return instance_eng_
    
    def instance_eng(self, name_):
        instance_eng_ = self.__instance_eng.get(name_, None)
        return instance_eng_
    
    def instance_eng_del(self, name_):
        instance_eng_ = self.instance_eng(name_)
        if instance_eng_:
            del self.__instance_eng[name_]


"""

instance_PY = """def abstract(): # run-time emulation of C++ abstract method -- forces error if subclass doesn%SQ%t override
    import inspect
    caller = inspect.getouterframes(inspect.currentframe())[1][3]
    raise NotImplementedError(caller + %SQ% must be implemented in subclass%SQ%)

class Instance(object):
    def __init__(self, name_, type_):
        self.__name = name_
        self.__type = type_
        
    def name(self):
        return self.__name
    
    def type(self):
        return self.__type
    
    def attribute(self, key):           abstract()
    def attribute_is(self, key, val):   abstract()

    class Manager(object):
        def __init__(self):
            pass
        
        def instance(self, name_):              abstract()               
        def instance_new(self, name_, type_):   abstract()
        def instance_del(self, name_):          abstract()


def ShippingInstanceMgr():
    import instance_impl
    return instance_impl.ManagerImpl()

"""

instance_eng_PY = """from shipping import *
import instance

class InstanceEng(object):
    def __init__(self, name_, type_, engine_):
        self.__name = name_
        self.__type = type_
        self.__engine = engine_
    
    def name(self):
        return self.__name

    def type(self):
        return self.__type

    def engine(self):
        return self.__engine


"""

instance_impl_PY = """import sys
from shipping import *
import instance
import engine

class ManagerImpl(instance.Instance.Manager):
    def __init__(self):
        self.__instance = {}
        self.__engine = engine.Engine()

    
    def engine(self):
        return self.__engine 
    
    def instance(self, name_):
        return self.__instance.get(name_, None)
            
    def instance_new(self, name_, type_):
        import location_rep
        import origin_rep
        import segment_rep
        import shipment_rep
        
        instance_ = self.instance(name_)        
        if not instance_:
            self.engine().instance_eng_new(name_, type_)
            if type_ == LOCATION_TYPE:
                instance_ = location_rep.LocationRep(name_, type_, self)
            elif type_ == ORIGIN_TYPE:
                instance_ = origin_rep.OriginRep(name_, type_, self)
            elif type_ == SEGMENT_TYPE:
                instance_ = segment_rep.SegmentRep(name_, type_, self)
            elif type_ == SHIPMENT_TYPE:
                instance_ = shipment_rep.ShipmentRep(name_, type_, self)
            else:
                sys.stderr.write(%DQ%ManagerImpl.instance_new: no such type %s.%SLASH%n%DQ% % type_)
            
            if instance_:
                self.__instance[name_] = instance_
            else:
                sys.stderr.write(%DQ%ManagerImpl.instance_new: failed to create %s of type %s.%SLASH%n%DQ% % (name_, type_))
        else:
            sys.stderr.write(%DQ%ManagerImpl.instance_new: %s already exists.%SLASH%n%DQ% % name_)
        return instance_       
    
    def instance_del(self, name_):
        instance_ = self.instance(name_)
        if instance_:
            del self.__instance[name_]
            self.engine().instance_eng_del(name_)

class InstanceImpl(instance.Instance):
    def __init__(self, name_, type_, mgr_):
        instance.Instance.__init__(self, name_, type_)
        self.__mgr = mgr_
        self.__name = name_
        self.__type = type_
        
    def name(self):
        return self.__name
    
    def type(self):
        return self.__type
        
    def mgr(self):
        return self.__mgr
    
    def engine(self):
        return self.mgr().engine()
    
    def attribute(self, key):          instance.abstract()       
    def attribute_is(self, key, val):  instance.abstract()

    def attribute_err(self, key):
        sys.stderr.write(%SQ%Can%SLASH%%SQ%t read %DQ%%s%DQ% attribute of %DQ%%s%DQ%%SLASH%n%SQ% % (key, self.name))

    def attribute_is_err(self, key, val):
        sys.stderr.write(%SQ%Can%SLASH%%SQ%t write %DQ%%s%DQ% to %s%DQ% attribute of %DQ%%s%DQ%%SLASH%n%SQ% % (val, key, self.name))

if __name__ == %DQ%__main__%DQ%:
    print __file__

"""

location_PY = """from shipping import *
import engine
import instance_eng

class Location(instance_eng.InstanceEng):
    def __init__(self, name_, type_, engine_):
        instance_eng.InstanceEng.__init__(self, name_, type_, engine_)
        self.__shipment_count = 0 

    def shipment_count(self):
        return self.__shipment_count
    
    def shipment_count_inc(self):
        self.shipment_count_is(self.__shipment_count + 1)
        
    def shipment_count_is(self, val):
        if self.__shipment_count != val:
            self.__shipment_count = val

"""

location_rep_PY = """from shipping import *
import instance_impl
import location

class LocationRep(instance_impl.InstanceImpl):
    def __init__(self, name_, type_, mgr_):
        instance_impl.InstanceImpl.__init__(self, name_, type_, mgr_)
        
    def attribute(self, key):
        location_ = self.mgr().engine().instance_eng(self.name())
        if key is LOC_SHIPMENT_COUNT_ATTR:
            return str(location_.shipment_count())
        else:
            self.attribute_err(key)
        return %DQ%%DQ%

    def attribute_is(self, key, val):
        self.attribute_is_err(key, val)
                        

"""

origin_PY = """from shipping import *
import engine
import location

class Origin(location.Location):
    def __init__(self, name_, type_, engine_):
        location.Location.__init__(self, name_, type_, engine_)
#        self.__shipment_arrived = %DQ%%DQ%
        self.__shipment_complete = %DQ%%DQ%
        self.__destination = %DQ%%DQ%
        self.__shipment_id = 0

    def next_shipment_name(self):
        self.__shipment_id += 1
        return %DQ%%s:%s:%d%DQ% % (%DQ%Ship%DQ%, self.name(), self.__shipment_id)

    def destination(self):
        return self.__destination
    
    def destination_is(self, val):
        if self.__destination != val:
            self.__destination = val
        
    def shipment_complete(self):
        return self.__shipment_complete
    
    def shipment_complete_is(self, val):
        if self.__shipment_complete != val:
            self.__shipment_complete = val

"""

origin_rep_PY = """from shipping import *
import location_rep
import origin

class OriginRep(location_rep.LocationRep):
    def __init__(self, name_, type_, mgr_):
        location_rep.LocationRep.__init__(self, name_, type_, mgr_)

    def attribute(self, key):
        origin_ = self.mgr().engine().instance_eng(self.name())
        if key is ORG_DESTINATION_ATTR:
            return origin_.destination()
        elif key is ORG_NEXT_SHIPMENT_NAME_ATTR:
            return origin_.next_shipment_name()
        elif key is ORG_SHIPMENT_COMPLETE_ATTR:
            return origin_.shipment_complete()
        else:
            return location_rep.LocationRep.attribute(self, key)
        return %DQ%%DQ%
    
    def attribute_is(self, key, val):
        origin_ = self.mgr().engine().instance_eng(self.name())
        if key is ORG_DESTINATION_ATTR:
            origin_.destination_is(val)
        elif key is ORG_SHIPMENT_COMPLETE_ATTR:
            origin_.shipment_complete_is(val)
        else:
            location_rep.LocationRep.attribute_is(self, key, val)
                        

"""

segment_PY = """from shipping import *
import engine
import instance_eng

class Segment(instance_eng.InstanceEng):
    def __init__(self, name_, type_, engine_):
        instance_eng.InstanceEng.__init__(self, name_, type_, engine_)
        self.__source = %DQ%%DQ%
        self.__destination = %DQ%%DQ%
        self.__distance = 0

    def source(self):
        return self.__source

    def source_is(self, val):
        if self.__source != val:
            self.__source = val

    def destination(self):
        return self.__destination

    def destination_is(self, val):
        if self.__destination != val:
            self.__destination = val

    def distance(self):
        return self.__distance

    def distance_is(self, val):
        if self.__distance != val:
            self.__distance = val


"""

segment_rep_PY = """from shipping import *
import instance_impl
import segment

class SegmentRep(instance_impl.InstanceImpl):
    def __init__(self, name_, type_, mgr_):
        instance_impl.InstanceImpl.__init__(self, name_, type_, mgr_)
        
    def attribute(self, key):
        segment_ = self.mgr().engine().instance_eng(self.name())
        if key == SEG_SOURCE_ATTR:
            return segment_.source()
        elif key == SEG_DESTINATION_ATTR:
            return segment_.destination()
        elif key == SEG_DISTANCE_ATTR:
            return %DQ%%.2f%DQ% % segment_.distance()
        else:
            self.attribute_err(key)
        return %DQ%%DQ%

    def attribute_is(self, key, val):
        segment_ = self.mgr().engine().instance_eng(self.name())
        if key == SEG_SOURCE_ATTR:
            segment_.source_is(val)
        elif key == SEG_DESTINATION_ATTR:
            segment_.destination_is(val)
        elif key == SEG_DISTANCE_ATTR:
            segment_.distance_is(float(val))
        else:
            self.attribute_is_err(key, val)

"""

shipment_PY = """from shipping import *
import engine
import instance_eng

class Shipment(instance_eng.InstanceEng):
    def __init__(self, name_, type_, engine_):
        instance_eng.InstanceEng.__init__(self, name_, type_, engine_)   
        self.__destination = %DQ%%DQ%
        self.__origin = %DQ%%DQ%
        self.__location = %DQ%%DQ%
        self.__segment = %DQ%%DQ%
        self.__speed = 1.0

    def destination(self):
        return self.__destination

    def destination_is(self, val):
        if self.__destination != val:
            self.__destination = val

    def origin(self):
        return self.__origin

    def origin_is(self, val):
        if self.__origin != val:
            self.__origin = val

    def location(self):
        return self.__location

    def location_is(self, val):
        if self.__location != val:
            self.__location = val

    def segment(self):
        return self.__segment

    def segment_is(self, val):
        if self.__segment != val:
            self.__segment = val
          
    def speed(self):
        return self.__speed

    def speed_is(self, val):
        if self.__speed != val:
            self.__speed = val
          

"""

shipment_rep_PY = """from shipping import *
import instance_impl
import shipment

class ShipmentRep(instance_impl.InstanceImpl):
    def __init__(self, name_, type_, mgr_):
        instance_impl.InstanceImpl.__init__(self, name_, type_, mgr_)

    def attribute(self, key):
        shipment_ = self.mgr().engine().instance_eng(self.name())
        if key == SHP_DESTINATION_ATTR:
            return shipment_.destination()
        elif key == SHP_ORIGIN_ATTR:
            return shipment_.origin()
        elif key == SHP_LOCATION_ATTR:
            return shipment_.location()
        elif key == SHP_SEGMENT_ATTR:
            return shipment_.segment()
        elif key == SHP_SPEED_ATTR:
            return %DQ%%.2f%DQ% % shipment_.speed()
        else:
            self.attribute_err(key)
        return %DQ%%DQ%

    def attribute_is(self, key, val):
        shipment_ = self.mgr().engine().instance_eng(self.name())
        if key == SHP_DESTINATION_ATTR:
            shipment_.destination_is(val)
        elif key == SHP_ORIGIN_ATTR:
            shipment_.origin_is(val)
        elif key == SHP_LOCATION_ATTR:
            shipment_.location_is(val)
        elif key == SHP_SEGMENT_ATTR:
            shipment_.segment_is(val)
        elif key == SHP_SPEED_ATTR:
            shipment_.speed_is(float(val))
        else:
            self.attribute_is_err(key, val)

"""

shipping_PY = """LOCATION_TYPE = %DQ%Location%DQ%
LOC_SHIPMENT_COUNT_ATTR = %DQ%Shipment count%DQ%

ORIGIN_TYPE = %DQ%Origin%DQ%
ORG_DESTINATION_ATTR = %DQ%Destination%DQ%
ORG_NEXT_SHIPMENT_NAME_ATTR = %DQ%Next shipment name%DQ%
ORG_SHIPMENT_COMPLETE_ATTR = %DQ%Shipment complete%DQ%

SEGMENT_TYPE = %DQ%Segment%DQ%
SEG_SOURCE_ATTR = %DQ%Source%DQ%
SEG_DESTINATION_ATTR = %DQ%Destination%DQ%
SEG_DISTANCE_ATTR = %DQ%Distance%DQ%

SHIPMENT_TYPE = %DQ%Shipment%DQ%
SHP_DESTINATION_ATTR = %DQ%Destination%DQ%
SHP_ORIGIN_ATTR = %DQ%Origin%DQ%
SHP_LOCATION_ATTR = %DQ%Location%DQ%
SHP_SEGMENT_ATTR = %DQ%Segment%DQ%
SHP_SPEED_ATTR = %DQ%Speed%DQ%

"""


class RecipeUnpacker(object):
    SQUOTE_ESCAPE = "%SQ%"
    DQUOTE_ESCAPE = "%DQ%"
    SLASH_ESCAPE = "%SLASH%"
    TRIPLE_SQUOTE_ESCAPE = "%SQSQSQ%"
    TRIPLE_DQUOTE_ESCAPE = "%DQDQDQ%"
    def __init__(self, dir=None):
        self.dir = dir
        if not self.dir:
            self.dir = os.getcwd()            
        if not os.path.exists(self.dir):
            os.makedirs(self.dir)

    def execute(self):
        os.chdir(self.dir)
        for key in globals():
            match = re.match(("^([A-Za-z0-9_]+)_PY$"), key)
            if match:
                file_name = "%s.py" % match.group(1)
                path = os.path.join(self.dir, file_name)
                print "Unpacking %s ..." % path 
                src = globals()[key]
                src = src.replace(RecipeUnpacker.TRIPLE_SQUOTE_ESCAPE, "'''")
                src = src.replace(RecipeUnpacker.TRIPLE_DQUOTE_ESCAPE, '"""')
                src = src.replace(RecipeUnpacker.SQUOTE_ESCAPE, "'")
                src = src.replace(RecipeUnpacker.DQUOTE_ESCAPE, '"')
                src = src.replace(RecipeUnpacker.SLASH_ESCAPE, "\\")
                open(path, "w").write(src)
        
if __name__ == "__main__":
    print __file__
    RecipeUnpacker().execute()
    raw_input("RecipeUnpacker complete. Press RETURN...") 

from shipping import * import instance  __author__=[%DQ%<NAME> (<EMAIL>)%DQ%,] __version__=%DQ%2010-07-20%DQ%  class Tester(object):     def __init__(self):         self.__mgr = None         self.__count = 0         self.__successes = 0      def setup(self):         self.__mgr = instance.ShippingInstanceMgr()         pass      def takedown(self):         self.__mgr = None      def mgr(self):         return self.__mgr      def test(self, result):         self.__count += 1         if result:             self.__successes += 1         else:             self.__successes += 0 # for breakpoint      def test_bool(self, result, flag):         self.test(result == flag)      def test_instance_new(self, name_, type_):         instance_ = self.mgr().instance_new(name_, type_)         self.test(instance_ != None)         if instance_:             self.test(instance_.name() == name_)             self.test(instance_.type() == type_)         return instance_      def test_attribute(self, instance_, key, val, flag=True):         instance_.attribute_is(key, val)         self.test_bool(instance_.attribute(key) == val, flag)      def test_readonly_attribute(self, instance_, key, expected):         val = instance_.attribute(key)         self.test(val == expected)      def test_manager(self):         self.setup()         self.test(self.mgr() != None)         self.takedown()      def test_location(self):         self.setup()         a = %DQ%a%DQ%         instance_ = self.test_instance_new(a, LOCATION_TYPE)         self.test_readonly_attribute(instance_, LOC_SHIPMENT_COUNT_ATTR, %DQ%0%DQ%)         self.takedown()      def test_origin(self):         self.setup()         a = %DQ%a%DQ%         instance_ = self.test_instance_new(a, ORIGIN_TYPE)         self.test_attribute(instance_, ORG_DESTINATION_ATTR, %DQ%xxx%DQ%)         self.test_attribute(instance_, ORG_SHIPMENT_COMPLETE_ATTR, %DQ%xxx%DQ%)         self.test_readonly_attribute(instance_, ORG_NEXT_SHIPMENT_NAME_ATTR, %DQ%Ship:a:1%DQ%)         self.takedown()      def test_segment(self):         self.setup()         a = %DQ%a%DQ%         instance_ = self.test_instance_new(a, SEGMENT_TYPE)         self.test_attribute(instance_, SEG_SOURCE_ATTR, %DQ%xxx%DQ%)         self.test_attribute(instance_, SEG_DESTINATION_ATTR, %DQ%xxx%DQ%)         self.test_attribute(instance_, SEG_DISTANCE_ATTR, %DQ%10.00%DQ%)          self.takedown()      def test_shipment(self):         self.setup()         a = %DQ%a%DQ%         instance_ = self.test_instance_new(a, SHIPMENT_TYPE)         self.test_attribute(instance_, SHP_DESTINATION_ATTR, %DQ%xxx%DQ%)         self.test_attribute(instance_, SHP_ORIGIN_ATTR, %DQ%xxx%DQ%)         self.test_attribute(instance_, SHP_LOCATION_ATTR, %DQ%xxx%DQ%)         self.test_attribute(instance_, SHP_SEGMENT_ATTR, %DQ%xxx%DQ%)         self.test_attribute(instance_, SHP_SPEED_ATTR, %DQ%60.00%DQ%)                  self.takedown()      def test_deletion(self, type_):               a = %DQ%a%DQ%         inst_a = self.mgr().instance_new(a, type_)                 self.mgr().instance_del(a)         inst_a = self.mgr().instance(a)           self.test(inst_a == None)                    def test_deletions(self):         self.setup()         self.test_deletion(LOCATION_TYPE)         self.test_deletion(ORIGIN_TYPE)         self.test_deletion(SEGMENT_TYPE)         self.test_deletion(SHIPMENT_TYPE)         self.takedown()      def execute(self):         print %DQ%Tester.execute()...%DQ%         self.test_manager()         self.test_location()         self.test_origin()         self.test_segment()         self.test_shipment()         self.test_deletions()         self.report()      def report(self):         print %DQ%Tester:%DQ%, self.__successes, %DQ%out of%DQ%, self.__count,%DQ%tests.%DQ%         if (self.__successes != self.__count):             print %DQ%Tester: FAILED.%DQ%  def main():     Tester().execute()     raw_input(%DQ%Press RETURN...%DQ%)  if __name__ == %DQ%__main__%DQ%:     print __file__     main() import sys from shipping import *  class Engine(object):     def __init__(self):         self.__next_shipment_connector = %DQ%%DQ%         self.__instance_eng = {}      def activity_mgr(self):         return self.__activity_mgr          def instance_eng_new(self, name_, type_):         import instance_eng         import location         import origin         import segment         import shipment                  instance_eng_ = self.instance_eng(name_)         if not instance_eng_:             if type_ == LOCATION_TYPE:                 instance_eng_ = location.Location(name_, type_, self)             elif type_ == SEGMENT_TYPE:                 instance_eng_ = segment.Segment(name_, type_, self)             elif type_ == SHIPMENT_TYPE:                 instance_eng_ = shipment.Shipment(name_, type_, self)             elif type_ == ORIGIN_TYPE:                 instance_eng_ = origin.Origin(name_, type_, self)             else:                 sys.stderr.write(%DQ%Engine.instance_eng_new: no such type %s.%SLASH%n%DQ% % type_)                          if instance_eng_:                 self.__instance_eng[name_] = instance_eng_             else:                 sys.stderr.write(%DQ%Engine.instance_eng_new: failed to create %s of type %s.%SLASH%n%DQ% % (name_, type_))         else:             sys.stderr.write(%DQ%Engine.instance_eng_new: %s already exists.%SLASH%n%DQ% % name_)         return instance_eng_          def instance_eng(self, name_):         instance_eng_ = self.__instance_eng.get(name_, None)         return instance_eng_          def instance_eng_del(self, name_):         instance_eng_ = self.instance_eng(name_)         if instance_eng_:             del self.__instance_eng[name_] def abstract(): # run-time emulation of C++ abstract method -- forces error if subclass doesn%SQ%t override     import inspect     caller = inspect.getouterframes(inspect.currentframe())[1][3]     raise NotImplementedError(caller + %SQ% must be implemented in subclass%SQ%)  class Instance(object):     def __init__(self, name_, type_):         self.__name = name_         self.__type = type_              def name(self):         return self.__name          def type(self):         return self.__type          def attribute(self, key):           abstract()     def attribute_is(self, key, val):   abstract()      class Manager(object):         def __init__(self):             pass                  def instance(self, name_):              abstract()                        def instance_new(self, name_, type_):   abstract()         def instance_del(self, name_):          abstract()   def ShippingInstanceMgr():     import instance_impl     return instance_impl.ManagerImpl() from shipping import * import instance  class InstanceEng(object):     def __init__(self, name_, type_, engine_):         self.__name = name_         self.__type = type_         self.__engine = engine_          def name(self):         return self.__name      def type(self):         return self.__type      def engine(self):         return self.__engine import sys from shipping import * import instance import engine  class ManagerImpl(instance.Instance.Manager):     def __init__(self):         self.__instance = {}         self.__engine = engine.Engine()           def engine(self):         return self.__engine           def instance(self, name_):         return self.__instance.get(name_, None)                  def instance_new(self, name_, type_):         import location_rep         import origin_rep         import segment_rep         import shipment_rep                  instance_ = self.instance(name_)                 if not instance_:             self.engine().instance_eng_new(name_, type_)             if type_ == LOCATION_TYPE:                 instance_ = location_rep.LocationRep(name_, type_, self)             elif type_ == ORIGIN_TYPE:                 instance_ = origin_rep.OriginRep(name_, type_, self)             elif type_ == SEGMENT_TYPE:                 instance_ = segment_rep.SegmentRep(name_, type_, self)             elif type_ == SHIPMENT_TYPE:                 instance_ = shipment_rep.ShipmentRep(name_, type_, self)             else:                 sys.stderr.write(%DQ%ManagerImpl.instance_new: no such type %s.%SLASH%n%DQ% % type_)                          if instance_:                 self.__instance[name_] = instance_             else:                 sys.stderr.write(%DQ%ManagerImpl.instance_new: failed to create %s of type %s.%SLASH%n%DQ% % (name_, type_))         else:             sys.stderr.write(%DQ%ManagerImpl.instance_new: %s already exists.%SLASH%n%DQ% % name_)         return instance_                 def instance_del(self, name_):         instance_ = self.instance(name_)         if instance_:             del self.__instance[name_]             self.engine().instance_eng_del(name_)  class InstanceImpl(instance.Instance):     def __init__(self, name_, type_, mgr_):         instance.Instance.__init__(self, name_, type_)         self.__mgr = mgr_         self.__name = name_         self.__type = type_              def name(self):         return self.__name          def type(self):         return self.__type              def mgr(self):         return self.__mgr          def engine(self):         return self.mgr().engine()          def attribute(self, key):          instance.abstract()            def attribute_is(self, key, val):  instance.abstract()      def attribute_err(self, key):         sys.stderr.write(%SQ%Can%SLASH%%SQ%t read %DQ%%s%DQ% attribute of %DQ%%s%DQ%%SLASH%n%SQ% % (key, self.name))      def attribute_is_err(self, key, val):         sys.stderr.write(%SQ%Can%SLASH%%SQ%t write %DQ%%s%DQ% to %s%DQ% attribute of %DQ%%s%DQ%%SLASH%n%SQ% % (val, key, self.name))  if __name__ == %DQ%__main__%DQ%:     print __file__ from shipping import * import engine import instance_eng  class Location(instance_eng.InstanceEng):     def __init__(self, name_, type_, engine_):         instance_eng.InstanceEng.__init__(self, name_, type_, engine_)         self.__shipment_count = 0       def shipment_count(self):         return self.__shipment_count          def shipment_count_inc(self):         self.shipment_count_is(self.__shipment_count + 1)              def shipment_count_is(self, val):         if self.__shipment_count != val:             self.__shipment_count = val from shipping import * import instance_impl import location  class LocationRep(instance_impl.InstanceImpl):     def __init__(self, name_, type_, mgr_):         instance_impl.InstanceImpl.__init__(self, name_, type_, mgr_)              def attribute(self, key):         location_ = self.mgr().engine().instance_eng(self.name())         if key is LOC_SHIPMENT_COUNT_ATTR:             return str(location_.shipment_count())         else:             self.attribute_err(key)         return %DQ%%DQ%      def attribute_is(self, key, val):         self.attribute_is_err(key, val) from shipping import * import engine import location  class Origin(location.Location):     def __init__(self, name_, type_, engine_):         location.Location.__init__(self, name_, type_, engine_) #        self.__shipment_arrived = %DQ%%DQ%         self.__shipment_complete = %DQ%%DQ%         self.__destination = %DQ%%DQ%         self.__shipment_id = 0      def next_shipment_name(self):         self.__shipment_id += 1         return %DQ%%s:%s:%d%DQ% % (%DQ%Ship%DQ%, self.name(), self.__shipment_id)      def destination(self):         return self.__destination          def destination_is(self, val):         if self.__destination != val:             self.__destination = val              def shipment_complete(self):         return self.__shipment_complete          def shipment_complete_is(self, val):         if self.__shipment_complete != val:             self.__shipment_complete = val from shipping import * import location_rep import origin  class OriginRep(location_rep.LocationRep):     def __init__(self, name_, type_, mgr_):         location_rep.LocationRep.__init__(self, name_, type_, mgr_)      def attribute(self, key):         origin_ = self.mgr().engine().instance_eng(self.name())         if key is ORG_DESTINATION_ATTR:             return origin_.destination()         elif key is ORG_NEXT_SHIPMENT_NAME_ATTR:             return origin_.next_shipment_name()         elif key is ORG_SHIPMENT_COMPLETE_ATTR:             return origin_.shipment_complete()         else:             return location_rep.LocationRep.attribute(self, key)         return %DQ%%DQ%          def attribute_is(self, key, val):         origin_ = self.mgr().engine().instance_eng(self.name())         if key is ORG_DESTINATION_ATTR:             origin_.destination_is(val)         elif key is ORG_SHIPMENT_COMPLETE_ATTR:             origin_.shipment_complete_is(val)         else:             location_rep.LocationRep.attribute_is(self, key, val) from shipping import * import engine import instance_eng  class Segment(instance_eng.InstanceEng):     def __init__(self, name_, type_, engine_):         instance_eng.InstanceEng.__init__(self, name_, type_, engine_)         self.__source = %DQ%%DQ%         self.__destination = %DQ%%DQ%         self.__distance = 0      def source(self):         return self.__source      def source_is(self, val):         if self.__source != val:             self.__source = val      def destination(self):         return self.__destination      def destination_is(self, val):         if self.__destination != val:             self.__destination = val      def distance(self):         return self.__distance      def distance_is(self, val):         if self.__distance != val:             self.__distance = val from shipping import * import instance_impl import segment  class SegmentRep(instance_impl.InstanceImpl):     def __init__(self, name_, type_, mgr_):         instance_impl.InstanceImpl.__init__(self, name_, type_, mgr_)              def attribute(self, key):         segment_ = self.mgr().engine().instance_eng(self.name())         if key == SEG_SOURCE_ATTR:             return segment_.source()         elif key == SEG_DESTINATION_ATTR:             return segment_.destination()         elif key == SEG_DISTANCE_ATTR:             return %DQ%%.2f%DQ% % segment_.distance()         else:             self.attribute_err(key)         return %DQ%%DQ%      def attribute_is(self, key, val):         segment_ = self.mgr().engine().instance_eng(self.name())         if key == SEG_SOURCE_ATTR:             segment_.source_is(val)         elif key == SEG_DESTINATION_ATTR:             segment_.destination_is(val)         elif key == SEG_DISTANCE_ATTR:             segment_.distance_is(float(val))         else:             self.attribute_is_err(key, val) from shipping import * import engine import instance_eng  class Shipment(instance_eng.InstanceEng):     def __init__(self, name_, type_, engine_):         instance_eng.InstanceEng.__init__(self, name_, type_, engine_)            self.__destination = %DQ%%DQ%         self.__origin = %DQ%%DQ%         self.__location = %DQ%%DQ%         self.__segment = %DQ%%DQ%         self.__speed = 1.0      def destination(self):         return self.__destination      def destination_is(self, val):         if self.__destination != val:             self.__destination = val      def origin(self):         return self.__origin      def origin_is(self, val):         if self.__origin != val:             self.__origin = val      def location(self):         return self.__location      def location_is(self, val):         if self.__location != val:             self.__location = val      def segment(self):         return self.__segment      def segment_is(self, val):         if self.__segment != val:             self.__segment = val                def speed(self):         return self.__speed      def speed_is(self, val):         if self.__speed != val:             self.__speed = val from shipping import * import instance_impl import shipment  class ShipmentRep(instance_impl.InstanceImpl):     def __init__(self, name_, type_, mgr_):         instance_impl.InstanceImpl.__init__(self, name_, type_, mgr_)      def attribute(self, key):         shipment_ = self.mgr().engine().instance_eng(self.name())         if key == SHP_DESTINATION_ATTR:             return shipment_.destination()         elif key == SHP_ORIGIN_ATTR:             return shipment_.origin()         elif key == SHP_LOCATION_ATTR:             return shipment_.location()         elif key == SHP_SEGMENT_ATTR:             return shipment_.segment()         elif key == SHP_SPEED_ATTR:             return %DQ%%.2f%DQ% % shipment_.speed()         else:             self.attribute_err(key)         return %DQ%%DQ%      def attribute_is(self, key, val):         shipment_ = self.mgr().engine().instance_eng(self.name())         if key == SHP_DESTINATION_ATTR:             shipment_.destination_is(val)         elif key == SHP_ORIGIN_ATTR:             shipment_.origin_is(val)         elif key == SHP_LOCATION_ATTR:             shipment_.location_is(val)         elif key == SHP_SEGMENT_ATTR:             shipment_.segment_is(val)         elif key == SHP_SPEED_ATTR:             shipment_.speed_is(float(val))         else:             self.attribute_is_err(key, val) LOCATION_TYPE = %DQ%Location%DQ% LOC_SHIPMENT_COUNT_ATTR = %DQ%Shipment count%DQ%  ORIGIN_TYPE = %DQ%Origin%DQ% ORG_DESTINATION_ATTR = %DQ%Destination%DQ% ORG_NEXT_SHIPMENT_NAME_ATTR = %DQ%Next shipment name%DQ% ORG_SHIPMENT_COMPLETE_ATTR = %DQ%Shipment complete%DQ%  SEGMENT_TYPE = %DQ%Segment%DQ% SEG_SOURCE_ATTR = %DQ%Source%DQ% SEG_DESTINATION_ATTR = %DQ%Destination%DQ% SEG_DISTANCE_ATTR = %DQ%Distance%DQ%  SHIPMENT_TYPE = %DQ%Shipment%DQ% SHP_DESTINATION_ATTR = %DQ%Destination%DQ% SHP_ORIGIN_ATTR = %DQ%Origin%DQ% SHP_LOCATION_ATTR = %DQ%Location%DQ% SHP_SEGMENT_ATTR = %DQ%Segment%DQ% SHP_SPEED_ATTR = %DQ%Speed%DQ%