From 4f6ae55ba4fe63c93063d1f27298b68532d2542b Mon Sep 17 00:00:00 2001 From: seba Date: Mon, 10 Oct 2011 21:14:07 +0200 Subject: [PATCH] Some Api2-Handler fixes done with sping --- k4ever/api2/handlers.py | 62 +++++++++++++++++++++------------------- k4ever/buyable/models.py | 2 +- k4ever/main/models.py | 8 +++--- 3 files changed, 38 insertions(+), 34 deletions(-) diff --git a/k4ever/api2/handlers.py b/k4ever/api2/handlers.py index eee4b44..d878973 100644 --- a/k4ever/api2/handlers.py +++ b/k4ever/api2/handlers.py @@ -17,6 +17,8 @@ class BuyableItemHandler(BaseHandler): #fields = ('id', 'description') model = Buyable exclude = ('_*',) + + BUY_ITEM, BUY_DEPOSIT, BUY_ITEM_AND_DEPOSIT = range(3) def read(self, request, itemId=None): """Get one or multiple items. @@ -55,8 +57,8 @@ class BuyableItemHandler(BaseHandler): def create(self, request, itemId=None): """Buy a :class:`Buyable ` item. - - deposit Set to > 0 if you want to buy the item with deposit (default 0) - - amount amount of items to buy (default 1) + - 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) """ if not request.content_type: @@ -70,20 +72,22 @@ class BuyableItemHandler(BaseHandler): return rc.NOT_FOUND # parse post data - deposit = getInt(request.data, 'deposit', 0) + deposit = getInt(request.data, 'deposit', self.BUY_ITEM) amount = getInt(request.data, 'amount', 1) if amount < 1: return rc.BAD_REQUEST - if not item.hasDeposit() and deposit > 0: - return rc.BAD_REQUEST # this is just the user being plain stupid + if (not item.hasDeposit() and deposit != self.BUY_ITEM) or \ + deposit not in (self.BUY_ITEM, self.BUY_DEPOSIT, self.BUY_ITEM_AND_DEPOSIT): + return rc.BAD_REQUEST order = Order() order.create(request.user) order.save() for i in range(amount): - p = Purchase.create(order, item, isDeposit=False) - p.save() - if deposit > 0: + if deposit == self.BUY_ITEM or deposit == self.BUY_ITEM_AND_DEPOSIT: + p = Purchase.create(order, item, isDeposit=False) + p.save() + if deposit == self.BUY_DEPOSIT or deposit == self.BUY_ITEM_AND_DEPOSIT: p = Purchase.create(order, item, isDeposit=True) p.save() order.updatePrice(commit=True) @@ -102,13 +106,13 @@ class BuyableTypeHandler(BaseHandler): model = BuyableType class HistoryHandler(BaseHandler): - """Handler providing access to the users history """ + """Handler providing access to the user's history """ allowed_methods = ('GET',) fields = ('id', 'price', 'dateTime', ('purchase_set', (('buyable', ('id', )), 'price', 'name'))) @manglePluginPerms def read(self, request): - """Get the users history + """Get the user's history - num: Number of entries to return """ @@ -122,8 +126,8 @@ class HistoryHandler(BaseHandler): class TransactionTransactHandler(BaseHandler): """Handler for transaction. - This hanlder takes care of adding money to accounts and returning - previous moneytransfers + This handler takes care of adding money to accounts and returning + previous money transfers """ allowed_methods = ('GET', 'POST') @@ -132,7 +136,7 @@ class TransactionTransactHandler(BaseHandler): @manglePluginPerms def read(self, request): - """Return the users last transactions + """Return the user's last transactions - num: Number of entries to return """ @@ -149,8 +153,8 @@ class TransactionTransactHandler(BaseHandler): def create(self, request): """Transact money to an account - - amount: [req] Amount to add to the users account - - type: [req]Type of transaction (id) + - amount: [req] Amount to add to the user's account + - type: [req] Type of transaction (id) """ amount = getDecimal(request.POST, 'amount', Decimal(0)) tTypeId = getInt(request.POST, 'type', -1) @@ -184,21 +188,21 @@ class TransactionTypeHandler(BaseHandler): model = TransactionType class AccountBalanceHandler(BaseHandler): - """Handler for the users account balance""" + """Handler for the user's account balance""" allowed_methods = ('GET',) @manglePluginPerms def read(self, request): - """Returns the users current account balance""" + """Returns the user's current account balance""" balance = request.user.get_profile().balance return {'balance': balance} 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. - 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 + 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 configuration. """ allowed_methods = ('GET', 'POST') @@ -206,21 +210,21 @@ class AuthBlobHandler(BaseHandler): @requirePlugin @manglePluginPerms def read(self, request): - """Read the users authblob + """Read the user's authblob To use this function the plugin needs :attr:`main.models.Plugin.pluginCanReadAuthblob` to be true. """ if not request.plugin.pluginCanReadAuthblob: 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 request.pluginperms.authblob + return {'authblob': request.pluginperms.authblob} @requirePlugin @manglePluginPerms def create(self, request): - """Write the users authblob. + """Write the user's authblob. To use this function the plugin needs :attr:`main.models.Plugin.pluginCanWriteAuthblob` to be true. @@ -232,11 +236,11 @@ class AuthBlobHandler(BaseHandler): """ if not request.plugin.pluginCanWriteAuthblob: 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 if not request.data.has_key('authblob'): 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.save() @@ -248,20 +252,20 @@ class AuthUserHandler(BaseHandler): This handler is only available to plugins and only if :attr:`unique authblob ` 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') fields = ('id', 'username') @requirePlugin 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 """ if not request.plugin.uniqueAuthblob: 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 if not request.GET.has_key('authblob'): diff --git a/k4ever/buyable/models.py b/k4ever/buyable/models.py index 22cf246..9b8b122 100644 --- a/k4ever/buyable/models.py +++ b/k4ever/buyable/models.py @@ -21,7 +21,7 @@ class Buyable(models.Model): deposit = models.DecimalField(max_digits=8, decimal_places=2) description = models.TextField() buyableType = models.ManyToManyField(BuyableType) - barcode = models.CharField(max_length=100, unique=True) + barcode = models.CharField(max_length=100, default='', blank=True) def hasDeposit(self): diff --git a/k4ever/main/models.py b/k4ever/main/models.py index 3187007..b415d18 100644 --- a/k4ever/main/models.py +++ b/k4ever/main/models.py @@ -12,7 +12,7 @@ class UserProfile(models.Model): return "%s (Kontostand: %s)" % (self.user ,self.balance) 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: profile = UserProfile() profile.user = instance @@ -24,13 +24,13 @@ class Plugin(models.Model): """ This Model contains a plugin and its configuration. A Plugin consists of its own information (name, author, version - and descrption) which is displayed for the user on the plugin - selection page, a configuration what a plugin is allowed to do + and description, which are displayed on the plugin + selection page), a configuration of what a plugin is allowed to do and what not and an own user for authentication against the API. :attr:`uniqueAuthblob` is used if the :class:`Plugin` has to uniquely - identify an user by his/her :attr:`authblob `. + identify a user by his/her :attr:`authblob `. The other attributes are used for plugin/user read/write access to the authblob. """