#  Copyright (c) 2007, Enthought, Inc.
#  License: BSD Style.

# metadata.py --- Example of accessing trait metadata attributes

#--[Imports]--------------------------------------------------------------------
from traits.api import HasTraits, Int, List, Float, Instance, Any,\
                                 TraitType

#--[Code]-----------------------------------------------------------------------

class Foo( HasTraits ): pass

class Test( HasTraits ):
    i = Int(99)
    lf = List(Float)
    foo = Instance( Foo, () )
    any = Any( [1, 2, 3 ] )

#--[Example*]-------------------------------------------------------------------

t = Test()

# Prints values of various metadata attributes for each of the traits.
print t.trait( 'i' ).default                      # 99
print t.trait( 'i' ).default_kind                 # value
print t.trait( 'i' ).inner_traits                 # ()
print t.trait( 'i' ).is_trait_type( Int )         # True
print t.trait( 'i' ).is_trait_type( Float )       # False

print t.trait( 'lf' ).default                     # []
print t.trait( 'lf' ).default_kind                # list
print t.trait( 'lf' ).inner_traits # (<traits.traits.CTrait object at 0x01B24138>,)
print t.trait( 'lf' ).is_trait_type( List )       # True
print t.trait( 'lf' ).is_trait_type( TraitType )  # True
print t.trait( 'lf' ).is_trait_type( Float )      # False
print t.trait( 'lf' ).inner_traits[0].is_trait_type( Float ) # True

print t.trait( 'foo' ).default                    # <undefined>
print t.trait( 'foo' ).default_kind               # factory
print t.trait( 'foo' ).inner_traits               # ()
print t.trait( 'foo' ).is_trait_type( Instance )  # True
print t.trait( 'foo' ).is_trait_type( List  )     # False

print t.trait( 'any' ).default                    # [1, 2, 3]
print t.trait( 'any' ).default_kind               # list
print t.trait( 'any' ).inner_traits               # ()
print t.trait( 'any' ).is_trait_type( Any )       # True
print t.trait( 'any' ).is_trait_type( List )      # False

