Some Api2-Handler fixes done with sping
This commit is contained in:
parent
22d0bf50b9
commit
4f6ae55ba4
|
@ -17,6 +17,8 @@ class BuyableItemHandler(BaseHandler):
|
||||||
#fields = ('id', 'description')
|
#fields = ('id', 'description')
|
||||||
model = Buyable
|
model = Buyable
|
||||||
exclude = ('_*',)
|
exclude = ('_*',)
|
||||||
|
|
||||||
|
BUY_ITEM, BUY_DEPOSIT, BUY_ITEM_AND_DEPOSIT = range(3)
|
||||||
|
|
||||||
def read(self, request, itemId=None):
|
def read(self, request, itemId=None):
|
||||||
"""Get one or multiple items.
|
"""Get one or multiple items.
|
||||||
|
@ -55,8 +57,8 @@ class BuyableItemHandler(BaseHandler):
|
||||||
def create(self, request, itemId=None):
|
def create(self, request, itemId=None):
|
||||||
"""Buy a :class:`Buyable <buyable.models.Buyable>` item.
|
"""Buy a :class:`Buyable <buyable.models.Buyable>` item.
|
||||||
|
|
||||||
- deposit Set to > 0 if you want to buy the item with deposit (default 0)
|
- deposit: Set to 0 for no deposit, 1 for item+deposit and 2 for deposit only (default 0)
|
||||||
- amount amount of items to buy (default 1)
|
- amount: amount of items to buy (default 1)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not request.content_type:
|
if not request.content_type:
|
||||||
|
@ -70,20 +72,22 @@ class BuyableItemHandler(BaseHandler):
|
||||||
return rc.NOT_FOUND
|
return rc.NOT_FOUND
|
||||||
|
|
||||||
# parse post data
|
# parse post data
|
||||||
deposit = getInt(request.data, 'deposit', 0)
|
deposit = getInt(request.data, 'deposit', self.BUY_ITEM)
|
||||||
amount = getInt(request.data, 'amount', 1)
|
amount = getInt(request.data, 'amount', 1)
|
||||||
if amount < 1:
|
if amount < 1:
|
||||||
return rc.BAD_REQUEST
|
return rc.BAD_REQUEST
|
||||||
if not item.hasDeposit() and deposit > 0:
|
if (not item.hasDeposit() and deposit != self.BUY_ITEM) or \
|
||||||
return rc.BAD_REQUEST # this is just the user being plain stupid
|
deposit not in (self.BUY_ITEM, self.BUY_DEPOSIT, self.BUY_ITEM_AND_DEPOSIT):
|
||||||
|
return rc.BAD_REQUEST
|
||||||
order = Order()
|
order = Order()
|
||||||
order.create(request.user)
|
order.create(request.user)
|
||||||
order.save()
|
order.save()
|
||||||
|
|
||||||
for i in range(amount):
|
for i in range(amount):
|
||||||
p = Purchase.create(order, item, isDeposit=False)
|
if deposit == self.BUY_ITEM or deposit == self.BUY_ITEM_AND_DEPOSIT:
|
||||||
p.save()
|
p = Purchase.create(order, item, isDeposit=False)
|
||||||
if deposit > 0:
|
p.save()
|
||||||
|
if deposit == self.BUY_DEPOSIT or deposit == self.BUY_ITEM_AND_DEPOSIT:
|
||||||
p = Purchase.create(order, item, isDeposit=True)
|
p = Purchase.create(order, item, isDeposit=True)
|
||||||
p.save()
|
p.save()
|
||||||
order.updatePrice(commit=True)
|
order.updatePrice(commit=True)
|
||||||
|
@ -102,13 +106,13 @@ class BuyableTypeHandler(BaseHandler):
|
||||||
model = BuyableType
|
model = BuyableType
|
||||||
|
|
||||||
class HistoryHandler(BaseHandler):
|
class HistoryHandler(BaseHandler):
|
||||||
"""Handler providing access to the users history """
|
"""Handler providing access to the user's history """
|
||||||
allowed_methods = ('GET',)
|
allowed_methods = ('GET',)
|
||||||
fields = ('id', 'price', 'dateTime', ('purchase_set', (('buyable', ('id', )), 'price', 'name')))
|
fields = ('id', 'price', 'dateTime', ('purchase_set', (('buyable', ('id', )), 'price', 'name')))
|
||||||
|
|
||||||
@manglePluginPerms
|
@manglePluginPerms
|
||||||
def read(self, request):
|
def read(self, request):
|
||||||
"""Get the users history
|
"""Get the user's history
|
||||||
|
|
||||||
- num: Number of entries to return
|
- num: Number of entries to return
|
||||||
"""
|
"""
|
||||||
|
@ -122,8 +126,8 @@ class HistoryHandler(BaseHandler):
|
||||||
class TransactionTransactHandler(BaseHandler):
|
class TransactionTransactHandler(BaseHandler):
|
||||||
"""Handler for transaction.
|
"""Handler for transaction.
|
||||||
|
|
||||||
This hanlder takes care of adding money to accounts and returning
|
This handler takes care of adding money to accounts and returning
|
||||||
previous moneytransfers
|
previous money transfers
|
||||||
"""
|
"""
|
||||||
|
|
||||||
allowed_methods = ('GET', 'POST')
|
allowed_methods = ('GET', 'POST')
|
||||||
|
@ -132,7 +136,7 @@ class TransactionTransactHandler(BaseHandler):
|
||||||
|
|
||||||
@manglePluginPerms
|
@manglePluginPerms
|
||||||
def read(self, request):
|
def read(self, request):
|
||||||
"""Return the users last transactions
|
"""Return the user's last transactions
|
||||||
|
|
||||||
- num: Number of entries to return
|
- num: Number of entries to return
|
||||||
"""
|
"""
|
||||||
|
@ -149,8 +153,8 @@ class TransactionTransactHandler(BaseHandler):
|
||||||
def create(self, request):
|
def create(self, request):
|
||||||
"""Transact money to an account
|
"""Transact money to an account
|
||||||
|
|
||||||
- amount: [req] Amount to add to the users 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))
|
amount = getDecimal(request.POST, 'amount', Decimal(0))
|
||||||
tTypeId = getInt(request.POST, 'type', -1)
|
tTypeId = getInt(request.POST, 'type', -1)
|
||||||
|
@ -184,21 +188,21 @@ class TransactionTypeHandler(BaseHandler):
|
||||||
model = TransactionType
|
model = TransactionType
|
||||||
|
|
||||||
class AccountBalanceHandler(BaseHandler):
|
class AccountBalanceHandler(BaseHandler):
|
||||||
"""Handler for the users account balance"""
|
"""Handler for the user's account balance"""
|
||||||
allowed_methods = ('GET',)
|
allowed_methods = ('GET',)
|
||||||
|
|
||||||
@manglePluginPerms
|
@manglePluginPerms
|
||||||
def read(self, request):
|
def read(self, request):
|
||||||
"""Returns the users current account balance"""
|
"""Returns the user's current account balance"""
|
||||||
balance = request.user.get_profile().balance
|
balance = request.user.get_profile().balance
|
||||||
return {'balance': balance}
|
return {'balance': balance}
|
||||||
|
|
||||||
class AuthBlobHandler(BaseHandler):
|
class AuthBlobHandler(BaseHandler):
|
||||||
"""Handler to read and write an users authblob
|
"""Handler to read and write a user's authblob
|
||||||
|
|
||||||
Currently these functions are only available for a plugin user.
|
Currently these functions are only available for a plugin user.
|
||||||
Other users will get a rc.FORBIDDEN. Keep in mind that, to use
|
Other users will get a rc.FORBIDDEN. Keep in mind that to use
|
||||||
these functions a plugin needs the permissions to do this in its
|
these functions, a plugin needs the permissions to do this in its
|
||||||
configuration.
|
configuration.
|
||||||
"""
|
"""
|
||||||
allowed_methods = ('GET', 'POST')
|
allowed_methods = ('GET', 'POST')
|
||||||
|
@ -206,21 +210,21 @@ class AuthBlobHandler(BaseHandler):
|
||||||
@requirePlugin
|
@requirePlugin
|
||||||
@manglePluginPerms
|
@manglePluginPerms
|
||||||
def read(self, request):
|
def read(self, request):
|
||||||
"""Read the users authblob
|
"""Read the user's authblob
|
||||||
|
|
||||||
To use this function the plugin needs
|
To use this function the plugin needs
|
||||||
: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
|
ret = rc.FORBIDDEN
|
||||||
ret.write("\nThis plugin is not allowed to read the users authblob\n")
|
ret.write("\nThis plugin is not allowed to read the user's authblob\n")
|
||||||
return ret
|
return ret
|
||||||
return request.pluginperms.authblob
|
return {'authblob': request.pluginperms.authblob}
|
||||||
|
|
||||||
@requirePlugin
|
@requirePlugin
|
||||||
@manglePluginPerms
|
@manglePluginPerms
|
||||||
def create(self, request):
|
def create(self, request):
|
||||||
"""Write the users authblob.
|
"""Write the user's authblob.
|
||||||
|
|
||||||
To use this function the plugin needs
|
To use this function the plugin needs
|
||||||
:attr:`main.models.Plugin.pluginCanWriteAuthblob` to be true.
|
:attr:`main.models.Plugin.pluginCanWriteAuthblob` to be true.
|
||||||
|
@ -232,11 +236,11 @@ class AuthBlobHandler(BaseHandler):
|
||||||
"""
|
"""
|
||||||
if not request.plugin.pluginCanWriteAuthblob:
|
if not request.plugin.pluginCanWriteAuthblob:
|
||||||
ret = rc.FORBIDDEN
|
ret = rc.FORBIDDEN
|
||||||
ret.write("\nThis plugin is not allowed to write the users authblob\n")
|
ret.write("\nThis plugin is not allowed to write the user's authblob\n")
|
||||||
return ret
|
return ret
|
||||||
if not request.data.has_key('authblob'):
|
if not request.data.has_key('authblob'):
|
||||||
ret = rc.BAD_REQUEST
|
ret = rc.BAD_REQUEST
|
||||||
ret.write("\nTo change the users auth blob you actually need to provide one\n")
|
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()
|
||||||
|
|
||||||
|
@ -248,20 +252,20 @@ class AuthUserHandler(BaseHandler):
|
||||||
This handler is only available to plugins and only if
|
This handler is only available to plugins and only if
|
||||||
:attr:`unique authblob <main.models.Plugin.uniqueAuthblob>`
|
:attr:`unique authblob <main.models.Plugin.uniqueAuthblob>`
|
||||||
is set for this plugin. Then it will provide a mapping from
|
is set for this plugin. Then it will provide a mapping from
|
||||||
an authblob to a specifig user.
|
an authblob to a specific user.
|
||||||
"""
|
"""
|
||||||
allowed_methods = ('GET')
|
allowed_methods = ('GET')
|
||||||
fields = ('id', 'username')
|
fields = ('id', 'username')
|
||||||
|
|
||||||
@requirePlugin
|
@requirePlugin
|
||||||
def read(self, request):
|
def read(self, request):
|
||||||
"""Returns an user if one can be found, else rc.GONE
|
"""Returns an user if one can be found, else rc.NOT_FOUND
|
||||||
|
|
||||||
- authblob: [required] Authblob to search
|
- authblob: [required] Authblob to search
|
||||||
"""
|
"""
|
||||||
if not request.plugin.uniqueAuthblob:
|
if not request.plugin.uniqueAuthblob:
|
||||||
ret = rc.BAD_REQUEST
|
ret = rc.BAD_REQUEST
|
||||||
ret.write("\nThis plugin does not support unique auth blobs, therefore we can't identify an user uniquely by its authblob\n")
|
ret.write("\nThis plugin does not support unique auth blobs, therefore we can't identify a user uniquely by their authblob\n")
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
if not request.GET.has_key('authblob'):
|
if not request.GET.has_key('authblob'):
|
||||||
|
|
|
@ -21,7 +21,7 @@ class Buyable(models.Model):
|
||||||
deposit = models.DecimalField(max_digits=8, decimal_places=2)
|
deposit = models.DecimalField(max_digits=8, decimal_places=2)
|
||||||
description = models.TextField()
|
description = models.TextField()
|
||||||
buyableType = models.ManyToManyField(BuyableType)
|
buyableType = models.ManyToManyField(BuyableType)
|
||||||
barcode = models.CharField(max_length=100, unique=True)
|
barcode = models.CharField(max_length=100, default='', blank=True)
|
||||||
|
|
||||||
|
|
||||||
def hasDeposit(self):
|
def hasDeposit(self):
|
||||||
|
|
|
@ -12,7 +12,7 @@ class UserProfile(models.Model):
|
||||||
return "%s (Kontostand: %s)" % (self.user ,self.balance)
|
return "%s (Kontostand: %s)" % (self.user ,self.balance)
|
||||||
|
|
||||||
def createUserProfile(sender, instance, created, **kwargs):
|
def createUserProfile(sender, instance, created, **kwargs):
|
||||||
""" Hook to create a new :class:`UserProfile` if the user is created. """
|
""" Hook to create a new :class:`UserProfile` when the user is created. """
|
||||||
if created:
|
if created:
|
||||||
profile = UserProfile()
|
profile = UserProfile()
|
||||||
profile.user = instance
|
profile.user = instance
|
||||||
|
@ -24,13 +24,13 @@ class Plugin(models.Model):
|
||||||
""" This Model contains a plugin and its configuration.
|
""" This Model contains a plugin and its configuration.
|
||||||
|
|
||||||
A Plugin consists of its own information (name, author, version
|
A Plugin consists of its own information (name, author, version
|
||||||
and descrption) which is displayed for the user on the plugin
|
and description, which are displayed on the plugin
|
||||||
selection page, a configuration what a plugin is allowed to do
|
selection page), a configuration of what a plugin is allowed to do
|
||||||
and what not and an own user for authentication against the
|
and what not and an own user for authentication against the
|
||||||
API.
|
API.
|
||||||
|
|
||||||
:attr:`uniqueAuthblob` is used if the :class:`Plugin` has to uniquely
|
:attr:`uniqueAuthblob` is used if the :class:`Plugin` has to uniquely
|
||||||
identify an user by his/her :attr:`authblob <PluginPermission.authblob>`.
|
identify a user by his/her :attr:`authblob <PluginPermission.authblob>`.
|
||||||
The other attributes are used for plugin/user read/write access to the
|
The other attributes are used for plugin/user read/write access to the
|
||||||
authblob.
|
authblob.
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue