
    Vjh              
      .   d Z ddlmZ ddlZddlmZ dddd	d
ddddd	Zej                         D  ci c]  \  } }|| 
 c}} ZdZ	dddddddddd	Z
dddd
dddZddddddZd(d Zd)d!Zd*d"Zd+d#Zd*d$Z ej$                  d%      Zd,d&Zd-d'Zyc c}} w ).a  Mappings from source vocabularies to the canonical AFP vocabulary.

Drupal 7 / Backdrop `advisory` nodes (Sierra archive, Gulmarg, Chile, the
avalanche-center template) share one field schema:
  field_type_N        1 Storm Slab, 2 Deep Slab, 3 Wind Slab, 4 Wet Slab,
                      5 Persistent Slab, 6 Loose Wet, 7 Loose Dry,
                      8 Normal Caution, 9 Cornice, 10 Glide
  field_likelihood_N  1 Unlikely .. 5 Certain
  field_size_N        1..5 (D1..D5), up to two values = a range
  field_rose_N        danger_rose: columns _0.._23 (0-7 upper, 8-15 middle,
                      16-23 lower; N clockwise); any nonzero = selected
  field_danger_rating_1/2/3   '0'..'5' for lower / middle / upper
    )annotationsN   )cell_to_location                     	   )	r   r   r   r
   r   r   r	   r   
   z	Dry Loosez
Storm Slabz	Wind SlabzPersistent SlabzDeep Persistent Slabz	Wet LoosezWet SlabCorniceGlide)	r   r   r   r
   r   r   r	   r   r   )unlikelypossiblelikelyvery likelyzalmost certaincertainr   r   r   r   r   )r   r   r   r
   r   c                    	 t        |       }|t        k(  ryt        j                  |      dfS # t        t        f$ r Y yw xY w)zIReturn (afp_problem_id, is_normal_caution) for a Drupal field_type value.)NF)NTF)int	TypeError
ValueErrorDRUPAL_NORMAL_CAUTIONDRUPAL_PROBLEM_TO_AFPget)valuekeys     (/var/www/avy-guidance/api/app/mapping.pydrupal_problem_typer    2   sM    %j ## $$S)500	 z" s   . A A c                    g }t        d      D ]7  }| j                  |      }|dvst        |      }|s'|j                  |       9 |S )zHdanger_rose column values {cell_index: value} -> selected AFP locations.   )Nr   0 )ranger   r   append)valuesoutcellvlocs        r   rose_cells_to_locationsr,   =   sP    
Cb	  JJt&&"4(C

3  J    c                8   | | dk(  ry t        | t        t        z        s't        |       j	                         j                         rt        |       }d|cxk  rdk  r|S  d S t        j                  t        |       j	                         j                               S )Nr$   r   r   )	
isinstancer   floatstrstripisdigitLIKELIHOOD_WORDSr   lowerr   r*   s     r   parse_likelihoodr7   I   s}    }%u%U)9)9);)C)C)EJKaKq)KT)E
 0 0 2 8 8 :;;r-   c                    g }| xs g D ].  }	 t        |      }d|cxk  rdk  sn |j                  |       0 |syt	        |      t        |      fS # t        t        f$ r Y [w xY w)zTA list of size values (Drupal ints or AFP strings like "1.5") -> (min, max) D-scale.r   r   )NN)r0   r   r   r&   minmax)r'   numsr*   fs       r   parse_sizesr=   R   st    D\r 	aA ;Q;KKN t9c$i :& 		s   AA%$A%c                d    	 t        |       }d|cxk  rdk  r|S  d S # t        t        f$ r Y y w xY w)Nr   r   )r   r   r   r6   s     r   parse_dangerr?   a   sB    J Q!1%% z" s    //z(\d{4})-(\d{2})-(\d{2})c                    t         j                  | xs d      }|r7|j                  d       d|j                  d       d|j                  d       S d S )Nr$   r   -r   r   )
TITLE_DATEsearchgroup)titlems     r   date_from_titlerG   l   sL    %+2&A89aggaj\1771:,a
|4CtCr-   c                ~    t        | dd       t        | dd       }}|dk\  r|n|dz
  }| dt        |dz         dd  S )	zFNorthern-hemisphere winter season label, e.g. 2020-12-01 -> '2020-21'.Nr
   r   r	   r   r   rA   )r   r1   )date_isoyrF   starts       r   
season_forrM   q   sS    x|c(1Q-0qAaAQUEWAc%!)nRS)*++r-   )returnztuple[int | None, bool])r'   zdict[int, int | None]rN   z	list[str])rN   z
int | None)rN   z!tuple[float | None, float | None])rE   
str | NonerN   rO   )rJ   r1   rN   r1   )__doc__
__future__r   reenginer   r   itemsAFP_TO_DRUPAL_PROBLEMr   AFP_PROBLEM_NAMESr4   LIKELIHOOD_NAMESr    r,   r7   r=   r?   compilerB   rG   rM   )kr*   s   00r   <module>rZ      s    # 	 $ !aA!aQO *?*E*E*GH$!QAH   
    "jX-T]^ 1	< & RZZ23
D
,s Is   B