Beispiel #1
0
class FamilyNameWithUnitsLinkage(HasTraits):
    """ units and family_name are always compatible. family_name is the master
    and must be changed first if you want to change both.
    """
    family_name = FamilyNameTrait(
        'length', is_strict=True, allow_none=False, units_trait='units')
    units = UnitsTrait(
        'm', is_strict=True, allow_none=False, family_trait='family_name')

    def __init__(self, **traits):
        """ Create a new FamilyNameWithUnitsLinkage. """

        # HasTraits.__init__ will assign attributes from **traits in an abitrary
        # order (its a dictionary).  However, this class defines a relationship
        # between units and family_name and therefore must make sure the
        # assignments are done in the proper order.
        if 'units' in traits and 'family_name' in traits:
            units = traits.pop('units')
            family_name = traits.pop('family_name')

        else:
            units = family_name = None

        super(FamilyNameWithUnitsLinkage, self).__init__(**traits)

        if units is not None:
            self.family_name = family_name
            self.units = units

        return
Beispiel #2
0
class FamilyNameStrict(HasTraits):
    family_name = FamilyNameTrait(is_strict=True)
Beispiel #3
0
class FamilyNameStrictNotNone(HasTraits):
    family_name = FamilyNameTrait('unknown', is_strict=True, allow_none=False)
Beispiel #4
0
class UnitsStrictWithFamily(HasTraits):
    units = UnitsTrait(
        is_strict=True, allow_none=True, family_trait='family_name')
    family_name = FamilyNameTrait('unknown', allow_none=False)