U
    /e                     @  s   d Z ddlmZ ddlZeeZddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ d	ZG d
d deZG dd deZeeeedd ZdS )z6 Provide ``Nullable`` and ``NonNullable`` properties.     )annotationsN)Any   )property_linkregister_type_link	type_link)SingleParameterizedProperty)	Undefined)NonNullableNullablec                      st   e Zd ZdZddddddd fddZdd	 fd
d
Z fddZ fddZddddd fddZ  Z	S )r   z> A property accepting ``None`` or a value of some other type. NFdefaulthelp
serializedreadonlyNonereturnc                  s   t  j|||||d d S Nr   super__init__self
type_paramr   r   r   r   	__class__ @/tmp/pip-unpacked-wheel-f5fndrjf/bokeh/core/property/nullable.pyr   -   s    zNullable.__init__modelsc                  s   |d krd S t  j||dS )Nr   )r   	from_json)r   jsonr    r   r   r   r!   0   s    zNullable.from_jsonc                   s   |d krd S t  |S N)r   	transformr   valuer   r   r   r$   3   s    zNullable.transformc                   s   |d krd S t  |S r#   )r   wrapr%   r   r   r   r'   6   s    zNullable.wrapTr   bool)r&   detailr   c                   s`   |d krd S zt  j|dd W n tk
r4   Y nX d S |sBdnd| j d|}t|d S )NF)r)    z(expected either None or a value of type z, got )r   validate
ValueErrorr   )r   r&   r)   msgr   r   r   r+   9   s    zNullable.validate)T)
__name__
__module____qualname____doc__r   r!   r$   r'   r+   __classcell__r   r   r   r   r   *   s   r   c                      s2   e Zd ZdZedddddd fddZ  ZS )	r
   zQ A property accepting a value of some other type while having undefined default. NFr   r   r   c                  s   t  j|||||d d S r   r   r   r   r   r   r   J   s    zNonNullable.__init__)r.   r/   r0   r1   r	   r   r2   r   r   r   r   r
   G   s   r
   c                 C  s   t |  dt| j dS )N())r   r   r   )objr   r   r   _sphinx_type_linkY   s    r6   )r1   
__future__r   logging	getLoggerr.   logtypingr   Z_sphinxr   r   r   basesr   Z
singletonsr	   __all__r   r
   r6   r   r   r   r   <module>   s   
	