U
    eN                     @   s(   d dl T d dlmZ G dd deZdS )    )*)CmfAssetc                       s^   e Zd Z fddZ fddZdd Zdd Zd	d
 Zd fdd	Zdd Z	dd Z
  ZS )r   c                    s"   |    |   t j|| d S N)	_calc_cat_calc_parentsupersave)selfargskwargs	__class__ #./modules/asset/models/cmf_asset.pyr      s    zCmfAsset.savec                    s   t   dddg S )Nzparent.*r   zasset_cat.parent)r   save_preload_fieldsr	   r   r   r   r      s
      zCmfAsset.save_preload_fieldsc                 C   s   | j stjjdgd| _ d S )Nparent)Zfields)	asset_catZmodelsZCmfAssetCatgetr   r   r   r   r      s    zCmfAsset._calc_catc                 C   s"   | j s|   | js| j j| _d S r   )r   r   r   r   r   r   r   r      s    zCmfAsset._calc_parentc                 C   s0   |  dg | js&|   | jj  | jjjS )Nzparent.asset_code_prefix)Zload_fieldsr   r   Zasset_code_prefixloadvaluer   r   r   r   get_code_prefix   s
    zCmfAsset.get_code_prefixFc                    s   | j r| jjs|sd S | j s*t   d S |rx|  }| j j| drb| j jd|dkrxd| j	_t   d S | jjr| j j|   dsd | _ t   d S d S )N-T)
coder   Z
is_changedr   
_calc_coder   r   
startswithcountZ
logic_type)r	   Zfrom_recalculateZ
new_prefixr   r   r   r   "   s(    
,
 
zCmfAsset._calc_codec                 C   sN   d}| j dddgdd| jgdd| jggd	gd
d}|rJt|jdd }|S )Nr   z
SIMILAR TOz
%-[0-9]+\Zr   =idz!=z-cmf_created_atT)filterZorder_byZinclude_deletedr   )sget	parent_idr   intr   split)r	   Z
max_numberZlastr   r   r    _get_current_code_number_from_db;   s    "z)CmfAsset._get_current_code_number_from_dbc                 C   s   t j}d}| jr| jj}d| j d| }| j d| d}|jj|dd}|  z2||rl||}n|  d
 }||| W 5 z|  W nF tj	j
k
r } z$td| d|j d	|j  W 5 d }~X Y nX X | S )NZNOASSETznext_code_number-r   z.lock   )timeoutzlock release error z, lock_name z
, timeout    )ZAPPZREDIS_DBr"   r   
class_nameZredislockacquirerelease
exceptionsZ	LockErrorgdebugnamer'   existsZincrr%   set)r	   Zredis_dbsuffixkeyZlock_keyr*   enext_code_numberr   r   r   r6   E   s$    
4zCmfAsset.next_code_number)F)__name__
__module____qualname__r   r   r   r   r   r   r%   r6   __classcell__r   r   r   r   r      s   
r   N)Zcmf.includeZmodules.asset.fields.cmf_assetr   r   r   r   r   <module>   s   