Add default parameter to descriptions

The __init__ method for spplus and dummy backends were moved to
PaymentCommon. The same thing will happen to systempayv2 and sips
backends.
This commit is contained in:
Benjamin Dauvergne 2011-05-27 15:55:26 +02:00
parent b1c6775fa2
commit 9f72272089
4 changed files with 37 additions and 26 deletions

View File

@ -1,11 +1,13 @@
import os.path
import os
import random
import logging
from datetime import date
__all__ = [ 'PaymentCommon', 'URL', 'HTML', 'RANDOM' ]
LOGGER = logging.getLogger(__name__)
RANDOM = random.SystemRandom()
URL = 1
@ -14,6 +16,14 @@ HTML = 2
class PaymentCommon(object):
PATH = '/tmp'
def __init__(self, options):
LOGGER.debug('initializing with options %s' % options)
for key, value in self.description['parameters'].iteritems():
if 'default' in value:
setattr(self, key, options.get(key, value['default']))
else:
setattr(self, key, options.get(key))
def transaction_id(self, length, choices, *prefixes):
while True:
parts = [RANDOM.choice(choices) for x in range(length)]

View File

@ -20,10 +20,25 @@ class Payment(PaymentCommon):
you can find on:
http://dummy-payment.demo.entrouvert.com/
You must pass the following keys inside the options dictionnary:
- dummy_service_url, the URL of the dummy payment service, it defaults
to the one operated by Entr'ouvert.
- direct_notification_url: where to POST to notify the service of a
payment
- origin: a human string to display to the user about the origin of
the request.
- siret: an identifier for the eCommerce site, fake.
- next_url: the return URL for the user (can be overriden on a per
request basis).
'''
description = {
'caption': 'Dummy payment backend',
'parameters': {
'dummy_service_url': {
'caption': 'URL of the dummy payment service',
'default': SERVICE_URL,
},
'direct_notification_url': {
'caption': 'direct notification url',
},
@ -40,20 +55,6 @@ class Payment(PaymentCommon):
}
}
def __init__(self, options):
'''
You must pass the following keys inside the options dictionnary:
- direct_notification_url: where to POST to notify the service of a
payment
- siret: an identifier for the eCommerce site
- origin: a human string to display to the user about the origin of
the request.
'''
self.direct_notification_url = options['direct_notification_url']
self.siret = options['siret']
self.origin = options['origin']
self.next_url = options.get('next_url','')
def request(self, montant, email=None, next_url=None):
transaction_id = self.transaction_id(30, ALPHANUM, 'dummy', self.siret)
if self.next_url:
@ -87,7 +88,6 @@ if __name__ == '__main__':
'origin': 'Mairie de Perpette-les-oies'
}
p = Payment(options)
print p.request(10.00, email='toto@example.com', next_url='http://example.com/retour')
retour = 'http://example.com/retour?amount=10.0&direct_notification_url=http%3A%2F%2Fexample.com%2Fdirect_notification_url&email=toto%40example.com&transaction_id=6Tfw2e1bPyYnz7CedZqvdHt7T9XX6T&return_url=http%3A%2F%2Fexample.com%2Fretour&nok=1'
r = p.response(retour.split('?',1)[1])
assert not r[0]

View File

@ -63,17 +63,18 @@ class Payment(PaymentCommon):
'caption': 'Siret of the entreprise augmented with the '
'site number, example: 00000000000001-01',
'regexp': re.compile('^ *(\d{14}-\d{2}) *$')
}
},
'langue': {
'caption': 'Language of the customers',
'default': 'FR',
},
'taxe': {
'caption': 'Taxes',
'default': '0.00'
},
}
}
def __init__(self, options):
LOGGER.debug('initializing spplus payment with %s' % options)
self.cle = options['cle']
self.siret = options['siret']
self.devise = '978'
self.langue = options.get('langue', 'FR')
self.taxe = options.get('taxe', '0.00')
devise = '978'
def request(self, montant, email=None, next_url=None):
LOGGER.debug('requesting spplus payment with montant %s email=%s and \

View File

@ -25,8 +25,8 @@ def isonow():
.replace(':','')[:14]
class Parameter:
def __init__(self, name, ptype, code, max_length=None, length=None, needed=False,
default=None, choices=None):
def __init__(self, name, ptype, code, max_length=None, length=None,
needed=False, default=None, choices=None):
self.name = name
self.ptype = ptype
self.code = code