Codice sorgente per thx.fcm.models

# -*- coding: utf-8 -*-

'''
Device
============

È stata creata la classe Device estendendo la classe AbstractDevice (di django-fcm) 
per ridefinirne alcuni attributi e per aggiungere funzionalità

* :class:`Device` (``AbstractDevice``, ``UserModel``, ``DateModel``, ``OrderedModel``)


Modelli
========

.. autoclass:: Device
   :members:

'''
from __future__ import unicode_literals

from django.conf import settings
from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _

from fcm.models import AbstractDevice

from thx.core.models import UserModel, CleanModel, DateModel, OrderedModel


[documenti]class Device(AbstractDevice, UserModel, DateModel, OrderedModel): """``Device`` è una classe che estende ``AbstractDevice`` di ``django-fcm`` e ``CleanModel``, ``UserModel``, ``DateModel``, ``OrderedModel`` di thx-core_. Alla classe vengono aggiunti alcuni attributi per raccogliere ulteriori informazioni dei vari device che vengono registrati; il campo ``reference`` può essere utilizzato per indicare per esempio l'utente o un codice univoco per individuare il device associato ad esso. Infine sono stati aggiunti i metodi sotto riportati. Le notifiche possono essere inviate partendo da una istanza device precisa, oppure da un queryset. .. _thx-core: https://docs.thux.it/thx-core """ dev_id = models.CharField( blank=True, null=True, verbose_name=_("device id"), max_length=150 ) platform = models.CharField( verbose_name=_("platform"), max_length=50 ) version = models.CharField( verbose_name=_("version"), max_length=150 ) reference = models.CharField( blank=True, null=True, max_length=150, verbose_name=_('reference'), ) class Meta: verbose_name = _('device') verbose_name_plural = _('devices') ordering = ('ordering', '-date_last_modify') permissions = ( ("list_device", "Can list device"), ("detail_device", "Can detail device"), ("disable_device", "Can disable device"), ) def __str__(self): return '{}: {} {}...'.format( self.reference, self.dev_id or '', self.reg_id[0:10] )
[documenti] @classmethod def get_test_data_for_push(cls): "genera payload di esempio per il campo data (sezione custom della notifica)" return { "text": "Test FCM send <strong> YES! </strong> test length test length test length test length.", "label": f"Test FCM send {timezone.now()}", "date": "16:33", "link": { "label": 'Go to your badges', "url": 'notification-center' }, "display": False, "icon": 'statics/svg-icons/profile-trophy.svg' }
[documenti] @classmethod def get_test_notification_for_push(cls): "genera payload di esempio per il campo notification (sezione base per la notifica)" return { "message": "Message: Test FCM send", "title": "Title: Test FCM send", "body": f"Body: Test FCM send {timezone.now()}", "icon": "https://adrenalinik.quasar.thux.dev/statics/icons/android-icon-192x192.png" }
[documenti] @classmethod def get_test_extra_option_for_push(cls): "genera payload di opzioni extra" return { 'webpush': { 'fcm_options': { 'link': 'https://adrenalinik.quasar.thux.dev' }, 'headers': { 'Urgency': 'high' }, }, "priority": "high", }
[documenti] def mark_inactive(self, **kwargs): "metodo ingaggiato dal sistema quando si ottiene una risposta di device invalido da FCM" super(Device, self).mark_inactive(**kwargs) if getattr(settings, 'THX_FCM_DEVICE_DELETE_INVALID_REG_ID', False): self.delete()
[documenti] def send_test_push_message(self, data=None, notification=None, extra_option=None): """invia notifica di test tramite FCM :arg data: payload customizzato da inviare con la notifica; se non valorizzata verrà impostata col metodo get_test_data_for_push :arg notification: payload di base della notifica; se non valorizzata verrà impostata col metodo get_test_notification_for_push :arg extra_options: payload extra da inviare con la notifica; se non valorizzata verrà impostata col metodo get_test_extra_option_for_push """ if not data: data = self.get_test_data_for_push() if not notification: notification = self.get_test_notification_for_push() if not extra_option: extra_option = self.get_test_extra_option_for_push() self.send_message(data=data, notification=notification, **extra_option)