
    vwg                         d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZmZmZ d dlmZmZ d dlmZ  d dlm!Z! d dl"m#Z#  G d de          Z$defdZ%dS )    )Iterable)cache)CaseQWhen)from_orm_to_blockfrom_orm_to_page)ImageInterface)PageBlockInterface)PageInterface)PageRepositoryInterface)Cover)CatalogBlock)	BaseBlockBasePageModelBlockPage)LandingLandingBlock)r   )CatalogPageTemplate)BlockRelationshipc                       e Zd Zdededz  fdZddedz  dedz  dedz  fdZde	de
e         fd	Zdeddfd
ZdefdZdedefdZdedefdZdededz  fdZdS )PageRepositoryslugreturnNc                     	 t           j                            d                              |          }n# t           j        $ r Y d S w xY wt          |          S )Ntemplate)product_type__slug)r   objectsselect_relatedgetDoesNotExistr   )selfr   blocks      L/var/www/html/cms/infrastructure/persistence/repositories/page_repository.pyget_catalog_blockz PageRepository.get_catalog_block   sf    	 (77
CCGG[_G``EE( 	 	 	44	 !'''s   36 A	A	idurlc                 H   t                      }|r|t          |          z  }nt          j        d|           }|s|t          |          z  }	 t          j                            |          }n# t          j        $ r Y d S w xY wt          ||                     |                    }t          j        d| |d           |S |S 	 t          j                            |          }t          ||                     |                    S # t          j        $ r Y d S w xY w)Nr'   zpage-r(   pageblocksi  )timeout)	r   r   r!   r   r   r"   r	    _PageRepository__get_page_blocksset)r#   r'   r(   queryr-   page_dbs         r%   r!   zPageRepository.get"   sA    	Q"XXXEE9]S]]++D 	s# "l..u55GG(      44  (WT=S=ST[=\=\]]]	-#--w????K	<##E**D#d6L6LT6R6RSSSS  	 	 	44	s%   A2 2BBAD D! D!
page_modelc                    t          |t                    rt          }nIt          |t                    rt          }n,t          |t
                    rt          }nt          d          |j        	                    |          
                    d                              dd          }t          j        	                    |          
                    t          d t          |          D                        }g }|D ]i}|                    |j                                      d	                              d
                                          }|                    |           j|S )NzFpage_model must be 'Page', 'CatalogPageTemplate' or 'Landing' instance)r-   my_ordernameT)flat)id__inc                 6    g | ]\  }}t          ||           S ))r'   then)r   ).0posr'   s      r%   
<listcomp>z4PageRepository.__get_page_blocks.<locals>.<listcomp>L   s)    OOOWS"42C(((OOO    r   styles)
isinstancer   r   r   CatalogPageBlockr   r   
ValueErrorr   filterorder_byvalues_listr   r   	enumerate__getattribute__block_model_namer    prefetch_relatedfirstappend)r#   r4   page_block_classblock_namesr.   block_modelsr$   block_models           r%   __get_page_blocksz PageRepository.__get_page_blocks:   se   j$'' 
	g$
$788 	g/
G,, 	g+ efff $+++<<EEjQQ]]^dko]pp 	 #*111EENNOO	+8N8NOOOP
 
  	- 	-E&&u'=>>
++!!(++	  ,,,,r?   c                 *   t           j                            |          }g }i }|j                                        D ]}|j        rSt          ||j                  r=t          ||j                  }t          |
                                          }|r||z  }\|j        rBt          ||j                  }t          |
                                          }|r
|||j        <   d |_        |                                 |D ]R}	|	j        j        D ]C}
|
j        |j        k    r1d |	_        t#          |	|
j        |           |	                                 DS|                                D ]*\  }}t          ||          }|                    |           +d S )Nr*   )r   r   r!   _meta
get_fieldsone_to_manyhasattrr7   getattrlistallmany_to_manypksavefieldsrelated_model	__class__setattritemsr1   )r#   r'   r-   related_objects_to_copyrelations_to_setfieldrelated_object_managerrelated_objects	relationsrelated_objectrelated_object_field
field_names               r%   
clone_pagezPageRepository.clone_page\   s   |2&&"$Z**,, 	= 	=E  =4,, C-4T5:-F-F*&*+A+E+E+G+G&H&HO& C/?B/# =)0uz)B)B& !7!;!;!=!=>>	 =3<$UZ0		5 	* 	*N(6(<(C * *$'5GG(,N%N,@,EtLLL"'')))	* &6%;%;%=%= 	! 	!!J	D*--EIIi    	! 	!r?   c                     t           j                                        }t          ||                     |                    S )N)r.   )r   r   rK   r	   r0   )r#   r-   s     r%   get_catalog_page_templatez(PageRepository.get_catalog_page_template~   s7    "*0022T-C-CD-I-IJJJJr?   c                     t          t          j                            d                              |                    S )Nr   )producttype__slug)r   r   r   r    r!   )r#   r   s     r%   get_catalog_coverz PageRepository.get_catalog_cover   s2     !=!=j!I!I!M!M`d!M!e!efffr?   c                     t           j                            |          }t          ||                     |                    S )Nr+   r,   )r   r   r!   r	   r0   )r#   r(   r-   s      r%   get_landingzPageRepository.get_landing   s;    ""s"++T$2H2H2N2NOOOOr?   c                     	 t           j                            |          }n# t           j        $ r Y d S w xY w|j        S )Nr+   )r   r   r!   r"   logo)r#   r(   landings      r%   get_landing_logozPageRepository.get_landing_logo   sP    	o))c)22GG# 	 	 	44	 |s    # 66)NN)__name__
__module____qualname__strr   r&   intr   r!   r   r   r   r0   rk   rm   rp   rr   r
   rv    r?   r%   r   r      s[       (c (.@4.G ( ( ( ( cDj cDj MTXDX    0 M  hy>Q        D !S  !T  !  !  !  !DK= K K K Kgc g.@ g g g gPs P} P P P PC NT,A      r?   r   r   c                      t                      S )N)r   r|   r?   r%   get_page_repositoryr~      s    r?   N)&collections.abcr   django.core.cacher   django.db.modelsr   r   r   application.mappers.pager   r	   domain.common.screenr
   &domain.page_blocks.entities.base_blockr    domain.page_blocks.entities.pager   "domain.page_blocks.page_repositoryr   /infrastructure.persistence.models.blocks.blocksr   6infrastructure.persistence.models.blocks.catalog_blockr   /infrastructure.persistence.models.blocks.commonr   r   r   r   1infrastructure.persistence.models.blocks.landingsr   r   0infrastructure.persistence.models.catalog.blocksrB   r   (infrastructure.persistence.models.commonr   r   r~   r|   r?   r%   <module>r      s   $ $ $ $ $ $ # # # # # # * * * * * * * * * * H H H H H H H H / / / / / / E E E E E E : : : : : : F F F F F F A A A A A A O O O O O O            T S S S S S S S V V V V V V P P P P P P F F F F F Fv v v v v, v v vr4      r?   