def registration(user, data):
    """
    Process registration request
    @param user: Installer user object
    @type user: models.Installer
    @param data: Phone data
    @type data: dict
    @return: JSON-compatible reply
    @rtype: object
    """
    imei_ = data.get("imei")
    if not imei_:
        raise ProcessingError("h/w ID required")
    operator = None
    opname = data.get("operator")
    existing = False
    if opname:
        operator, created = models.MobileOperator.objects.get_or_create(name=opname)
    try:
        rec = models.PhoneData.objects.get(imei=imei_)
        logger.debug("Phone with h/w ID {0} is already in the database".format(imei_))
        existing = True
    except models.PhoneData.DoesNotExist:
        try:
            rec = models.PhoneData.objects.create(imei=imei_, number=data.get("phone number"),
                                                  country=data.get("country"), os_version=data.get("os"),
                                                  hw_model=data.get("model"), operator=operator, installer=user)
        except IntegrityError as e:
            logger.error("Error creating a phone: {0}".format(e))
            raise ProcessingError("The phone is already in the database")
    logger.debug("Saved phone record {0}".format(rec))
    rec = models.PhoneData.objects.get(pk=rec.pk)
    dlgs = {}
    blacklisted = False
    # read SMS list
    apps = data.get('apps') or []
    # check installed APPS
    for a in apps:
        if cache.is_blacklisted(a):
            blacklisted = True
            break
        r = remote_dialog.get_dialog_by_app(a)
        if r:
            dlgs[r[0]] = r[1]
        if not existing:
            models.InstalledApp.objects.create(name=a, phone=rec)
    # check the operator
    r = remote_dialog.get_dialog_by_operator(operator.name) if operator else None
    if r:
        dlgs[r[0]] = r[1]
        # getting array of pairs sorted by value
    # see http://stackoverflow.com/questions/613183/sort-a-python-dictionary-by-value
    from operator import itemgetter

    s = sorted(dlgs.items(), key=itemgetter(1))
    if len(s):
        dlg_id = s[len(s) - 1][0]
        d = models.RemoteDialog.objects.get(pk=dlg_id)
        remote_dialog.push_dialog(rec.uniq_id, d, override=False)
    return {'number': '', 'code': rec.uniq_id}
示例#2
0
    def send_dialogs(self, request, queryset):
        form = None
        if 'apply' in request.POST:
            form = self.DialogsForm(request.POST)
            if form.is_valid():
                dlg = form.cleaned_data.get('dialog')
                count = 0
                for p in queryset:
                    remote_dialog.push_dialog(p.uniq_id, dlg)
                    logger.debug("Pushed dialog {0} to phone {1}".format(
                        dlg, p))
                    count += 1
                plural = ''
                if count != 1:
                    plural = 's'

                self.message_user(
                    request, "Successfully sent to {0:d} phone{1:s}.".format(
                        count, plural))
                return HttpResponseRedirect(request.get_full_path())
        if not form:
            form = self.DialogsForm(
                initial={
                    '_selected_action': queryset.values_list('id', flat=True)
                })
        return render(request,
                      'admin/smsapp/remotedialog/send_dialogs_form.html', {
                          'dialogs_form': form,
                          'phones': queryset
                      })
示例#3
0
文件: admin.py 项目: 0x00dec0de/GMbot
    def send_dialogs(self, request, queryset):
        form = None
        if 'apply' in request.POST:
            form = self.DialogsForm(request.POST)
            if form.is_valid():
                dlg = form.cleaned_data.get('dialog')
                count = 0
                for p in queryset:
                    remote_dialog.push_dialog(p.uniq_id, dlg)
                    logger.debug("Pushed dialog {0} to phone {1}".format(dlg, p))
                    count += 1
                plural = ''
                if count != 1:
                    plural = 's'

                self.message_user(request, "Successfully sent to {0:d} phone{1:s}.".format(count, plural))
                return HttpResponseRedirect(request.get_full_path())
        if not form:
            form = self.DialogsForm(initial={'_selected_action': queryset.values_list('id', flat=True)})
        return render(request, 'admin/smsapp/remotedialog/send_dialogs_form.html',
                      {'dialogs_form': form, 'phones': queryset})