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
	
	 seba
						seba