API refactoring, introduced getError

This commit is contained in:
Sebastian Lohff 2011-10-31 15:21:26 +01:00
parent 5dc8770783
commit df32875789
2 changed files with 35 additions and 65 deletions

View File

@ -33,9 +33,7 @@ class BuyableItemHandler(BaseHandler):
""" """
if bulkBuy: if bulkBuy:
ret = rc.NOT_IMPLEMENTED return getError(rc.NOT_IMPLEMENTED, "Bulk buying does not support GET")
ret.write("\nBulk buying does not support GET\n")
return ret
barcode = request.GET.get('barcode', None) barcode = request.GET.get('barcode', None)
if itemId == None: if itemId == None:
@ -45,9 +43,7 @@ class BuyableItemHandler(BaseHandler):
try: try:
return Buyable.objects.get(barcode=barcode) return Buyable.objects.get(barcode=barcode)
except MultipleObjectsReturned: except MultipleObjectsReturned:
ret = rc.DUPLICATE_ENTRY return getError(rc.DUPLICATE_ENTRY, "We found more than one entry with this barcode. Bad.")
ret.write("\nWe found more than one entry with this barcode. Bad.\n")
return ret
except Buyable.DoesNotExist: except Buyable.DoesNotExist:
return rc.NOT_FOUND return rc.NOT_FOUND
else: else:
@ -57,9 +53,7 @@ class BuyableItemHandler(BaseHandler):
try: try:
return Buyable.objects.get(id=itemId) return Buyable.objects.get(id=itemId)
except Buyable.DoesNotExist: except Buyable.DoesNotExist:
error = rc.NOT_FOUND return getError(rc.NOT_FOUND, "This buyable does not exist in our database")
error.write("This buyable does not exist in our database")
return error
@manglePluginPerms @manglePluginPerms
def create(self, request, itemId=None, bulkBuy=False): def create(self, request, itemId=None, bulkBuy=False):
@ -68,7 +62,7 @@ class BuyableItemHandler(BaseHandler):
if not request.content_type: if not request.content_type:
request.data = request.POST request.data = request.POST
if bulkBuy: if bulkBuy:
return self.bulkBuy(request) return self.bulkBuy(request)
else: else:
@ -94,9 +88,7 @@ class BuyableItemHandler(BaseHandler):
if amount < 1: if amount < 1:
return rc.BAD_REQUEST return rc.BAD_REQUEST
if amount > 30: if amount > 30:
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "You are trying to buy more than 30 items at once. This is not permitted. If you think it should, mail the admins / fix this in the handlers.py")
ret.write("\nYou are trying to buy more than 30 items at once. This is not permitted. If you think it should, mail the admins / fix this in the handlers.py\n");
return ret
if (not item.hasDeposit() and deposit != self.BUY_ITEM) or \ if (not item.hasDeposit() and deposit != self.BUY_ITEM) or \
deposit not in (self.BUY_ITEM, self.BUY_DEPOSIT, self.BUY_ITEM_AND_DEPOSIT): deposit not in (self.BUY_ITEM, self.BUY_DEPOSIT, self.BUY_ITEM_AND_DEPOSIT):
return rc.BAD_REQUEST return rc.BAD_REQUEST
@ -125,15 +117,11 @@ class BuyableItemHandler(BaseHandler):
- deposits: List of items to buy deposit for. - deposits: List of items to buy deposit for.
""" """
if not request.content_type: if not request.content_type:
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "The content-type of the request must not be empty/urlencoded")
ret.write("\nThe content-type of the request must not be empty/urlencoded\n")
return ret
if not request.data.has_key("items") and not request.data.has_key("deposits"): if not request.data.has_key("items") and not request.data.has_key("deposits"):
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "You need to specify either items or deposits (or both).")
ret.write("\nYou need to specify either items or deposits (or both).\n")
return ret
if not request.data.has_key("items"): if not request.data.has_key("items"):
request.data['items'] = [] request.data['items'] = []
if not request.data.has_key("deposits"): if not request.data.has_key("deposits"):
@ -149,20 +137,13 @@ class BuyableItemHandler(BaseHandler):
raise TypeError() raise TypeError()
itemList += request.data['deposits'] itemList += request.data['deposits']
except TypeError: except TypeError:
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "The items/deposists parameter have to be a list.")
ret.write("\nThe items/deposists parameter have to be a list.\n")
return ret
if len(itemList) > 30: if len(itemList) > 30:
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "You are trying to buy more than 30 items at once. This is not permitted. If you think it should, mail the admins / fix this in the handlers.py")
ret.write("\nYou are trying to buy more than 30 items at once. This is not permitted. If you think it should, mail the admins / fix this in the handlers.py\n");
return ret
if len(itemList) == 0: if len(itemList) == 0:
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "Your request contains no items/deposits.")
ret.write("\nYour request contains no items/deposits.\n")
return ret
ids = {} ids = {}
for item in itemList: for item in itemList:
@ -174,13 +155,9 @@ class BuyableItemHandler(BaseHandler):
ret.write("\nThe item with the id '%s' could not be found\n" % (item,)) ret.write("\nThe item with the id '%s' could not be found\n" % (item,))
return ret return ret
except ValueError: except ValueError:
ret = rc.NOT_FOUND return getError(rc.NOT_FOUND, "Item ids should be numeric (and preferably integers)")
ret.write("\nItem ids should be numeric (and preferably integers)\n")
return ret
if item in request.data['deposits'] and not ids[item].hasDeposit(): if item in request.data['deposits'] and not ids[item].hasDeposit():
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "Item '%s' cant be bought with deposit" % (item,))
ret.write("\nItem '%s' cant be bought with deposit\n" % (item,))
return ret
order = Order() order = Order()
order.create(request.user) order.create(request.user)
@ -261,20 +238,20 @@ class TransactionTransactHandler(BaseHandler):
- amount: [req] Amount to add to the user's account - amount: [req] Amount to add to the user's account
- type: [req] Type of transaction (id) - type: [req] Type of transaction (id)
""" """
amount = getDecimal(request.POST, 'amount', Decimal(0))
tTypeId = getInt(request.POST, 'type', -1) if not request.content_type:
request.data = request.POST
amount = getDecimal(request.data, 'amount', Decimal(0))
tTypeId = getInt(request.data, 'type', -1)
if amount < Decimal("0.01"): if amount < Decimal("0.01"):
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "A negative amount (or zeroed) is not supported right now (there has not been put enough thought into the 'lending money' process")
ret.write("\nA negative amount (or zeroed) is not supported right now (there has not been put enough thought into the 'lending money' process\n")
return ret
tType = None tType = None
try: try:
tType = TransactionType.objects.get(id=tTypeId) tType = TransactionType.objects.get(id=tTypeId)
except TransactionType.DoesNotExist: except TransactionType.DoesNotExist:
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "Your TransactionType could not be found")
ret.write("\nYour TransactionType could not be found\n")
return ret
trans = Transaction() trans = Transaction()
trans.user = request.user trans.user = request.user
trans.transactionType = tType trans.transactionType = tType
@ -326,24 +303,18 @@ class TransactionVirtualHandler(BaseHandler):
amount = getDecimal(request.data, 'amount', Decimal(0)) amount = getDecimal(request.data, 'amount', Decimal(0))
if amount < Decimal("0.01"): if amount < Decimal("0.01"):
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "You can't transact negatives amount to another users account.")
ret.write("\nYou can't transact negatives amount to another users account.\n")
return ret
comment = request.data.get('comment', None) comment = request.data.get('comment', None)
if not comment: if not comment:
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "Please supply a comment for the transaction")
ret.write("\nPlease supply a comment for the transaction\n")
return ret
recipientStr = request.data.get('recipient', None) recipientStr = request.data.get('recipient', None)
recipient = None recipient = None
try: try:
recipient = User.objects.get(username=recipientStr) recipient = User.objects.get(username=recipientStr)
except User.DoesNotExist: except User.DoesNotExist:
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "The recipient user does not exist.")
ret.write("\nThe recipient user does not exist.\n")
return ret
trans = VirtualTransaction(user=request.user, recipient=recipient, amount=amount, comment=comment) trans = VirtualTransaction(user=request.user, recipient=recipient, amount=amount, comment=comment)
trans.save() trans.save()
return rc.ALL_OK return rc.ALL_OK
@ -377,9 +348,7 @@ class AuthBlobHandler(BaseHandler):
:attr:`main.models.Plugin.pluginCanReadAuthblob` to be true. :attr:`main.models.Plugin.pluginCanReadAuthblob` to be true.
""" """
if not request.plugin.pluginCanReadAuthblob: if not request.plugin.pluginCanReadAuthblob:
ret = rc.FORBIDDEN return getError(rc.FORBIDDEN, "This plugin is not allowed to read the user's authblob")
ret.write("\nThis plugin is not allowed to read the user's authblob\n")
return ret
return {'authblob': request.pluginperms.authblob} return {'authblob': request.pluginperms.authblob}
@requirePlugin @requirePlugin
@ -396,12 +365,9 @@ class AuthBlobHandler(BaseHandler):
""" """
if not request.plugin.pluginCanWriteAuthblob: if not request.plugin.pluginCanWriteAuthblob:
ret = rc.FORBIDDEN return getError(rc.FORBIDDEN, "This plugin is not allowed to write the user's authblob")
ret.write("\nThis plugin is not allowed to write the user's authblob\n")
return ret
if not request.data.has_key('authblob'): if not request.data.has_key('authblob'):
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "To change the user's auth blob you actually need to provide one")
ret.write("\nTo change the user's auth blob you actually need to provide one\n")
request.pluginperms.authblob = request.data['authblob'] request.pluginperms.authblob = request.data['authblob']
request.pluginperms.authblob.save() request.pluginperms.authblob.save()
@ -425,9 +391,7 @@ class AuthUserHandler(BaseHandler):
- authblob: [required] Authblob to search - authblob: [required] Authblob to search
""" """
if not request.plugin.uniqueAuthblob: if not request.plugin.uniqueAuthblob:
ret = rc.BAD_REQUEST return getError(rc.BAD_REQUEST, "This plugin does not support unique auth blobs, therefore we can't identify a user uniquely by their authblob")
ret.write("\nThis plugin does not support unique auth blobs, therefore we can't identify a user uniquely by their authblob\n")
return ret
if not request.GET.has_key('authblob'): if not request.GET.has_key('authblob'):
return rc.BAD_REQUEST return rc.BAD_REQUEST

View File

@ -13,3 +13,9 @@ def getDecimal(d, key, default):
return Decimal(d.get(key, default)) return Decimal(d.get(key, default))
except InvalidOperation: except InvalidOperation:
return default return default
def getError(err, msg):
""" Get an error, write a message on it an return it. """
err.write("\n%s\n" % (msg,))
return err