Exemple #1
0
    def attempt(self):
        """
        Try to perform this payment.
        """
        self.last_attempted_at = datetime.now()
        # Write attempted date now so if something happens we can see this
        # payment was interrupted.
        self.save()
        try:
            flow_graph = FlowGraph(self.payer, self.recipient)
            flow_links = flow_graph.min_cost_flow(self.amount)
            with transaction.commit_on_success(using='ripple'):
                for creditline, amount in flow_links:
                    Entry.objects.create_entry(
                        self, creditline.account, -amount * creditline.bal_mult,
                        creditline.limit)
                self.status = 'completed'
                self.save()
        except BaseException as exc:

            # TODO: Handle collisions better here so we can retry or give the
            # user an informative error message, rather than the server error page.
            
            self.status = 'failed'
            self.save()
            if not isinstance(exc, PaymentError):
                raise
Exemple #2
0
    def attempt(self):
        """
        Try to perform this payment.
        """
        self.last_attempted_at = datetime.now()
        # Write attempted date now so if something happens we can see this
        # payment was interrupted.
        self.save()
        changed_accounts = []
        try:
            flow_graph = FlowGraph(self.payer, self.recipient)
            flow_links = flow_graph.min_cost_flow(self.amount)
            with transaction.atomic(using='ripple'):
                for creditline_id, amount in flow_links:
                    creditline = CreditLine.objects.get(pk=creditline_id)
                    Entry.objects.create_entry(self, creditline.account,
                                               -amount * creditline.bal_mult,
                                               creditline.limit)
                    changed_accounts.append(creditline.account)
                self.status = 'completed'
                self.save()
        except BaseException as exc:

            # TODO: Handle collisions better here so we can retry or give the
            # user an informative error message, rather than the server error page.

            self.status = 'failed'
            self.save()
            if not isinstance(exc, PaymentError):
                raise

        # Update cached graphs.
        for account in changed_accounts:
            for creditline in (account.pos_creditline, account.neg_creditline):
                update_creditline_in_cached_graphs(creditline)
Exemple #3
0
    def attempt(self):
        """
        Try to perform this payment.
        """
        self.last_attempted_at = datetime.now()
        # Write attempted date now so if something happens we can see this
        # payment was interrupted.
        self.save()
        changed_accounts = []
        try:
            flow_graph = FlowGraph(self.payer, self.recipient)
            flow_links = flow_graph.min_cost_flow(self.amount)
            with transaction.commit_on_success(using="ripple"):
                for creditline_id, amount in flow_links:
                    creditline = CreditLine.objects.get(pk=creditline_id)
                    Entry.objects.create_entry(
                        self, creditline.account, -amount * creditline.bal_mult, creditline.limit
                    )
                    changed_accounts.append(creditline.account)
                self.status = "completed"
                self.save()
        except BaseException as exc:

            # TODO: Handle collisions better here so we can retry or give the
            # user an informative error message, rather than the server error page.

            self.status = "failed"
            self.save()
            if not isinstance(exc, PaymentError):
                raise

        # Update cached graphs.
        for account in changed_accounts:
            for creditline in (account.pos_creditline, account.neg_creditline):
                update_creditline_in_cached_graphs(creditline)
Exemple #4
0
def credit_reputation(target, asker):
    version = _reputation_cache_version()
    key = 'credit_reputation(%s,%s)' % (repr(target), repr(asker))
    val = cache.get(key, version=version)
    if val is None:
        flow_graph = FlowGraph(target, asker, ignore_balances=True)
        val = flow_graph.max_flow()
        cache.set(key, val, None, version=version)
    return val
Exemple #5
0
def credit_reputation(target, asker):
    version = _reputation_cache_version()
    key = 'credit_reputation(%s,%s)' % (repr(target), repr(asker))
    val = cache.get(key, version=version)
    if val is None:
        flow_graph = FlowGraph(target, asker, ignore_balances=True)
        val = flow_graph.max_flow()
        cache.set(key, val, None, version=version)
    return val
Exemple #6
0
def max_payment(payer, recipient):
    flow_graph = FlowGraph(payer, recipient)
    return flow_graph.max_flow()
Exemple #7
0
def max_payment(payer, recipient):
    flow_graph = FlowGraph(payer, recipient)
    return flow_graph.max_flow()