Exemple #1
0
def install_webhook():
    paymill = Pymill(settings.PAYMILL_PRIVATE_KEY)
    secret = uuid.uuid4().hex
    path = reverse_lazy('paymill-webhook', args=[secret])
    url = ''.join([settings.PAYMILL_WEBHOOK_HOST, path])
    paymill.new_webhook(url, WEBHOOK_EVENTS)
    return secret
Exemple #2
0
def install_webhook():
    paymill = Pymill(settings.PAYMILL_PRIVATE_KEY)
    secret = uuid.uuid4().hex
    path = reverse('paymill-webhook', args=[secret])
    url = '%s://%s%s' % (settings.PAYMILL_WEBHOOK_PROTOCOL,
                         settings.PAYMILL_WEBHOOK_HOST, path)
    paymill.new_webhook(url, WEBHOOK_EVENTS)
    return secret
Exemple #3
0
def install_webhook():
    paymill = Pymill(settings.PAYMILL_PRIVATE_KEY)
    secret = uuid.uuid4().hex
    url = '%s%s' % (settings.PAYMILL_WEBHOOK_HOST,
                    reverse('paymill-webhook', args=[secret, ]))

    url_obj = urlparse(url)
    print(url_obj.geturl())

    paymill.new_webhook(url_obj.geturl(), WEBHOOK_EVENTS)
    return secret
Exemple #4
0
def get_webhook():
    paymill = Pymill(settings.PAYMILL_PRIVATE_KEY)
    webhooks = paymill.get_webhooks()
    for hook in webhooks:
        url = urlparse(hook.url)
        try:
            match = resolve(url.path)
            if match.url_name == 'paymill-webhook':
                return match.kwargs.get('secret', None)
        except:
            pass
    return None
Exemple #5
0
class PaymillModel(models.Model):
    paymill = Pymill(settings.PAYMILL_PRIVATE_KEY)

    id = models.CharField(max_length=80, db_index=True, primary_key=True)
    created_at = models.DateTimeField()
    updated_at = models.DateTimeField()

    def get_admin_url(self):
        info = (self._meta.app_label, self._meta.module_name)
        # Underscores need to be replaced:
        pk = self.pk.replace('_', '_5F')
        return reverse('admin:%s_%s_change' % info, args=(pk,))

    class Meta:
        app_label = 'paymill'
        abstract = True
        ordering = ['-created_at']

    def _update_from_paymill_object(self, ob):
        # Make sure we have a dict rather than a PaymillObject (from Pymill)
        ob = paymill_dict(ob)
        # Nothing has been updated yet
        updated = False
        # Iterate over all the items of the object dict
        for k, v in ob.items():
            # If this model has this field and the value is not None
            if v is not None and (hasattr(self, k) or hasattr(self, '%s_id' % k)):
                # Let's type check the field
                ftype = self._meta.get_field(k)
                # If the field is a DateTimeField ...
                if isinstance(ftype, models.DateTimeField):
                    # we know the value must be a datetime object
                    v = datetime.utcfromtimestamp(float(v))
                    v = utc.localize(v)
                # If the field is a ForeignKey ...
                if isinstance(ftype, models.ForeignKey):
                    # we know the value is an object-id and we must use the
                    # corresponding field name
                    k = '%s_id' % k
                    # What we have might not be the actual id of the object
                    if isinstance(v, dict):
                        # but a dict containing all its' attributes
                        v = v['id']

                # If the current value and the new value differ ...
                if getattr(self, k) != v:
                    # set the current value to the new value
                    setattr(self, k, v)
                # Have we updated anything yet?
                updated = updated or getattr(self, k) != v
        # Let the caller know if anything got updated
        return updated

    def _create_paymill_object(self, *args, **kwargs):
        raise NotImplementedError(
            '_create_paymill_object not implemented for this class')

    def save(self, *args, **kwargs):
        if not self.id:
            ob = self._create_paymill_object()
            if ob:
                self.id = ob.id
                self._update_from_paymill_object(ob)
        return super(PaymillModel, self).save(*args, **kwargs)

    def _delete_paymill_object(self):
        raise NotImplementedError(
            '_delete_paymill_object not implemented for this class')

    def delete(self, *args, **kwargs):
        self._delete_paymill_object()
        return super(PaymillModel, self).delete(*args, **kwargs)

    @classmethod
    def update_or_create(cls, ob):
        ob = paymill_dict(ob)
        created = False
        try:
            djob = cls.objects.get(id=ob['id'])
        except (cls.DoesNotExist, KeyError) as e:
            djob = cls()
            created = True

        djob._update_from_paymill_object(ob)
        djob.save()
        return djob
Exemple #6
0
def install_webhook():
    paymill = Pymill(settings.PAYMILL_PRIVATE_KEY)
    secret = uuid.uuid4().hex
    url = "http://%s%s" % (settings.PAYMILL_WEBHOOK_HOST, reverse("paymill-webhook", args=[secret]))
    paymill.new_webhook(url, WEBHOOK_EVENTS)
    return secret