ó
º9—^c           @  s¾   d  d l  m Z d  d l m Z d  d l m Z d d l m Z	 d e j
 f d „  ƒ  YZ d e j f d	 „  ƒ  YZ d
 e j j f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   unicode_literals(   t   models(   t   ugettext_lazyi   (   t   FCM_DJANGO_SETTINGSt   Devicec        	   B  sÄ   e  Z e j d  d d e d ƒ d e d e ƒ Z e j d e d ƒ d e d e d	 ƒ ƒ Z e j	 e
 d
 d e d e d e j ƒZ e j d e d ƒ d e d e ƒ Z d d d „  ƒ  YZ d „  Z RS(   t
   max_lengthiÿ   t   verbose_nameu   Namet   blankt   nullu	   Is activet   defaultt	   help_textu/   Inactive devices will not be sent notificationsu
   USER_MODELt	   on_deleteu   Creation datet   auto_now_addt   Metac           B  s   e  Z e Z RS(    (   t   __name__t
   __module__t   Truet   abstract(    (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyR      s   c         C  s;   |  j  p: t |  j p d ƒ p: d |  j j |  j p6 d f S(   Nu    u	   %s for %su   unknown user(   t   namet   strt	   device_idt	   __class__R   t   user(   t   self(    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyt   __str__   s    (    (   R   R   R   t	   CharFieldt   _R   R   t   BooleanFieldt   activet
   ForeignKeyt   SETTINGSt   CASCADER   t   DateTimeFieldt   date_createdR   R   (    (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyR   	   s   				t   FCMDeviceManagerc           B  s   e  Z d  „  Z RS(   c         C  s   t  |  j ƒ S(   N(   t   FCMDeviceQuerySett   model(   R   (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyt   get_queryset%   s    (   R   R   R%   (    (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyR"   $   s   R#   c           B  se   e  Z d d d d d d d d  „ Z d d d e d d e e d d d d d „ Z d „  Z d „  Z RS(   c         K  sÂ   |  r¾ d d l  m }	 t |  j d t ƒ j d d t ƒƒ }
 t |
 ƒ d k rj i t |  ƒ d 6d d 6g S|	 d	 |
 d
 | d | d | d | d | d | d | |  } |  j |
 | d ƒ | Sd S(   u   
        Send notification for all active devices in queryset and deactivate if
        DELETE_INACTIVE_DEVICES setting is set to True.
        i   (   t   fcm_send_bulk_messageR   u   registration_idt   flati    u   failureu   successt   registration_idst   titlet   bodyt   icont   datat   soundt   badget   api_keyu   resultsN(   t   fcmR&   t   listt   filterR   t   values_listt   lent&   _deactivate_devices_with_error_results(   R   R)   R*   R+   R,   R-   R.   R/   t   kwargsR&   R(   t   result(    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyt   send_message*   s*    	i   c         C  sÝ   |  rÙ d d l  m } t |  j d t ƒ j d d t ƒƒ } t | ƒ d k rj i t |  ƒ d 6d d 6g S| d	 | d
 | d | d | d | d | d | d | d | d |	 d |
 d | d | ƒ } |  j | | d ƒ | Sd S(   u‘   
        Send data messages for all active devices in queryset and deactivate if
        DELETE_INACTIVE_DEVICES setting is set to True.
        i   (   t   fcm_send_bulk_data_messagesR   u   registration_idR'   i    u   failureu   successR/   R(   t	   conditiont   collapse_keyt   delay_while_idlet   time_to_livet   restricted_package_namet   low_priorityt   dry_runt   data_messaget   content_availablet   timeoutt   json_encoderu   resultsN(   R0   R9   R1   R2   R   R3   R4   R5   (   R   R/   R:   R;   R<   R=   R>   R?   R@   RA   RB   RC   RD   R9   R(   R7   (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyt   send_data_messageT   s2    	c         C  sˆ   x t  | ƒ D]s \ } } d | k r d d d d g } | d | k r€ | | } |  j d | ƒ j d t ƒ |  j | ƒ q€ q q Wd  S(   Nu   erroru   MissingRegistrationu   MismatchSenderIdu   InvalidRegistrationu   NotRegisteredt   registration_idR   (   t	   enumerateR2   t   updatet   Falset%   _delete_inactive_devices_if_requested(   R   R(   t   resultst   indext   itemt
   error_listRF   (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyR5   ‡   s    
c         C  s'   t  d r# |  j d | ƒ j ƒ  n  d  S(   Nu   DELETE_INACTIVE_DEVICESRF   (   R   R2   t   delete(   R   RF   (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyRJ   ’   s    
N(   R   R   t   NoneR8   RI   RE   R5   RJ   (    (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyR#   )   s*   $&	t   AbstractFCMDevicec           B  s  e  Z d d d f Z e j d e d ƒ d e d e d e d e d	 ƒ d
 d ƒ Z e j d e d ƒ ƒ Z	 e j d e d
 d ƒ Z
 e ƒ  Z d d d „  ƒ  YZ d d d d d d d d „ Z d d e d d e e d d d d d d „ Z d „  Z e d „  ƒ Z RS(   u   iosu   androidu   webR   u	   Device IDR   R   t   db_indexR
   u   Unique device identifierR   i–   u   Registration tokent   choicesi
   R   c           B  s   e  Z e Z e d  ƒ Z RS(   u
   FCM device(   R   R   R   R   R   R   (    (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyR   §   s   c         K  sf   d d l  m }	 |	 d t |  j ƒ d | d | d | d | d | d	 | d
 | |  }
 |  j |
 ƒ |
 S(   u3   
        Send single notification message.
        i   (   t   fcm_send_messageRF   R)   R*   R+   R,   R-   R.   R/   (   R0   RT   R   RF   t"   _deactivate_device_on_error_result(   R   R)   R*   R+   R,   R-   R.   R/   R6   RT   R7   (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyR8   «   s    	i   c         C  s   d d l  m } | d t |  j ƒ d | d | d | d | d | d	 | d
 | d | d |	 d |
 d | d | ƒ } |  j | ƒ | S(   u+   
        Send single data message.
        i   (   t#   fcm_send_single_device_data_messageRF   R:   R;   R<   R=   R>   R?   R@   RA   RB   R/   RC   RD   (   R0   RV   R   RF   RU   (   R   R:   R;   R<   R=   R>   R?   R@   RA   RB   R/   RC   RD   RV   R7   (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyRE   È   s"    	c         C  s}   t  j j d |  j ƒ } d | d d k ry d d d d g } | d d d | k ry | j d	 t ƒ |  j | ƒ qy n  d  S(
   NRF   u   erroru   resultsi    u   MissingRegistrationu   MismatchSenderIdu   InvalidRegistrationu   NotRegisteredR   (   t	   FCMDevicet   objectsR2   RF   RH   RI   t$   _delete_inactive_device_if_requested(   R   R7   t   deviceRN   (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyRU   í   s    c         C  s   t  d r |  j ƒ  n  d  S(   Nu   DELETE_INACTIVE_DEVICES(   R   RO   (   RZ   (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyRY   õ   s    
(   u   iosu   ios(   u   androidu   android(   u   webu   web(    N(   R   R   t   DEVICE_TYPESR   R   R   R   R   t	   TextFieldRF   t   typeR"   RX   R   RP   R8   RI   RE   RU   t   staticmethodRY   (    (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyRQ   —   s@   					RW   c           B  s   e  Z d  d d „  ƒ  YZ RS(   R   c           B  s    e  Z e d  ƒ Z e d ƒ Z RS(   u
   FCM deviceu   FCM devices(   R   R   R   R   t   verbose_name_plural(    (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyR   ü   s   (    (   R   R   R   (    (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyRW   û   s   N(   t
   __future__R    t	   django.dbR   t   django.utils.translationR   R   t   settingsR   R   t   ModelR   t   ManagerR"   t   queryt   QuerySetR#   RQ   RW   (    (    (    s3   /tmp/pip-unpacked-wheel-zRhu6W/fcm_django/models.pyt   <module>   s   nd