def __init__(self, user, game, resource_key, consume_amount, gamesession_id, token): self.user = user self.game = game self.id = create_id() self.key = resource_key self.gamesession_id = gamesession_id self.token = token self.consumed = False # validation step try: consume_amount = int(consume_amount) except ValueError: raise StoreError( 'Item "%s" consume amount parameters must be an integer' % resource_key) self.consume_amount = consume_amount if consume_amount <= 0: raise StoreError( 'Item "%s" consume amount parameter must be non-negative' % resource_key) game_store_items = StoreList.get(game) try: resource_meta = game_store_items.get_resource(resource_key) if resource_meta.type != 'consume': raise StoreError('Item "%s" is not a consumable' % resource_key) except KeyError: raise StoreError('No item with key "%s"' % resource_key)
def __init__(self, user, game, resource_key, consume_amount, gamesession_id, token): self.user = user self.game = game self.id = create_id() self.key = resource_key self.gamesession_id = gamesession_id self.token = token self.consumed = False # validation step try: consume_amount = int(consume_amount) except ValueError: raise StoreError('Item "%s" consume amount parameters must be an integer' % resource_key) self.consume_amount = consume_amount if consume_amount <= 0: raise StoreError('Item "%s" consume amount parameter must be non-negative' % resource_key) game_store_items = StoreList.get(game) try: resource_meta = game_store_items.get_resource(resource_key) if resource_meta.type != 'consume': raise StoreError('Item "%s" is not a consumable' % resource_key) except KeyError: raise StoreError('No item with key "%s"' % resource_key)
def get_default_avatar(cls): default_avatar_generator = config.get('default_avatar', 'gravitar') if default_avatar_generator == 'gravitar': gravitar_address = config.get('gravitar_address', 'http://www.gravatar.com/avatar/') gravatar_type = config.get('gravatar_type', 'identicon') return gravitar_address + create_id() + '?d=' + gravatar_type else: return None
def create(cls, game, owner): datashare = DataShare(game) with datashare.lock: datashare.datashare_id = create_id() datashare.owner = owner.username datashare.users = [owner.username] datashare.created = time() datashare.joinable = True datashare.write() return datashare
def __init__(self, game, user, gamesession_id=None, created=None): self.game = game self.user = user if gamesession_id is None: gamesession_id = create_id() self.gamesession_id = gamesession_id if created is None: created = int(time()) self.created = created
def _set(self, key, value, owner, access): if value == '': try: del self.store[key] except KeyError: pass token = '' else: token = create_id() self.store[key] = { 'ownedBy': owner, 'value': value, 'access': access, 'token': token } self.write() return token
def __init__(self, user, game, transaction_items): self.user = user self.game = game self.id = create_id() self.items = transaction_items total = 0 game_store_items = StoreList.get(game) for item_key, item in transaction_items.items(): try: # convert string amounts to integers basket_amount = int(item['amount']) basket_price = int(item['price']) except (ValueError, KeyError, TypeError): raise StoreError( 'Item "%s" amount and price must be integers' % item_key) if basket_amount == 0: continue elif basket_amount < 0: raise StoreError('Item "%s" amount must be non-negative' % item_key) game_offering = game_store_items.get_offering(item_key) minor_price = game_offering.get_price().get_minor_amount() if basket_price != minor_price: raise StoreError('Item "%s" price does not match' % item_key) self.items[item_key] = { 'price': basket_price, 'amount': basket_amount } total += minor_price * basket_amount self.total = total self.completed = False self.completed_time = None UserTransactionsList.get(user).add_transaction(self.id, self)
def _get_task_data(cls, slug): game = _get_game(slug) user = _get_user_name() try: data = _json_decoder.decode(request.POST['data']) except KeyError: raise BadRequest('Missing parameter "data"') except JSONDecodeError as e: raise BadRequest('Data-parameter JSON error: %s' % str(e)) if not isinstance(data, dict): raise BadRequest('Data-parameter is not a dict') # pylint: disable=E1103 get_data = data.get # pylint: enable=E1103 key = get_data('key') if not key: raise BadRequest('No notification-key given') ## check that the key actually exists on the game if key not in GameNotificationKeysList.get(game).to_dict(): raise BadRequest('Unknown key "' + key + '" given.') msg = get_data('msg') if not msg: raise BadRequest('No message given') if not msg.get('text'): raise BadRequest('No text-attribute in msg') try: delay = int(get_data('time') or 0) except ValueError: raise BadRequest('Incorrect format for time') ## filter out empty strings and if there's just nothing there, use the current user as default recipient recipient = get_data('recipient', '').strip() or user return create_id(), key, user, recipient, msg, game, delay
def __init__(self, user, game, transaction_items): self.user = user self.game = game self.id = create_id() self.items = transaction_items total = 0 game_store_items = StoreList.get(game) for item_key, item in transaction_items.items(): try: # convert string amounts to integers basket_amount = int(item['amount']) basket_price = int(item['price']) except (ValueError, KeyError, TypeError): raise StoreError('Item "%s" amount and price must be integers' % item_key) if basket_amount == 0: continue elif basket_amount < 0: raise StoreError('Item "%s" amount must be non-negative' % item_key) game_offering = game_store_items.get_offering(item_key) minor_price = game_offering.get_price().get_minor_amount() if basket_price != minor_price: raise StoreError('Item "%s" price does not match' % item_key) self.items[item_key] = { 'price': basket_price, 'amount': basket_amount } total += minor_price * basket_amount self.total = total self.completed = False self.completed_time = None UserTransactionsList.get(user).add_transaction(self.id, self)
def __init__(self, user, game, transaction_items): self.user = user self.game = game self.id = create_id() self.items = transaction_items total = 0 game_store_items = StoreList.get(game) resource_keys = set() if len(transaction_items) == 0: raise StoreError('Basket is empty') for item_key, item in transaction_items.items(): try: # convert string amounts to integers basket_amount = int(item['amount']) basket_price = int(item['price']) except (ValueError, KeyError, TypeError): raise StoreError( 'Item "%s" amount and price must be integers' % item_key) if basket_amount == 0: continue elif basket_amount < 0: raise StoreError('Item "%s" amount must be non-negative' % item_key) game_offering = game_store_items.get_offering(item_key) minor_price = game_offering.get_price().get_minor_amount() if basket_price != minor_price: raise StoreError('Item "%s" price does not match' % item_key) offering_output = game_offering.output try: basket_item_output = item['output'] if not isinstance(basket_item_output, dict): raise ValueError() if len(offering_output) != len(basket_item_output): raise ValueError() for resource_key, amount in offering_output.items(): if amount != basket_item_output[resource_key]: raise ValueError() resource_keys.add(resource_key) except (KeyError, ValueError): raise StoreError( 'Offering "%s" output resources do not match' % item_key) self.items[item_key] = { 'price': basket_price, 'amount': basket_amount } total += minor_price * basket_amount for key in resource_keys: resource = game_store_items.get_resource(key) if resource is not None and resource.type == 'own': user_store_items = game_store_items.get_store_user(user) if user_store_items is not None: try: user_item = user_store_items.get_item(key) if user_item['amount'] > 0: raise StoreError( 'Basket contains an ownable item you already own' ) except KeyError: pass self.total = total self.completed = False self.completed_time = None UserTransactionsList.get(user).add_transaction(self.id, self)
def __init__(self, user, game, transaction_items): self.user = user self.game = game self.id = create_id() self.items = transaction_items total = 0 game_store_items = StoreList.get(game) resource_keys = set() if len(transaction_items) == 0: raise StoreError('Basket is empty') for item_key, item in transaction_items.items(): try: # convert string amounts to integers basket_amount = int(item['amount']) basket_price = int(item['price']) except (ValueError, KeyError, TypeError): raise StoreError('Item "%s" amount and price must be integers' % item_key) if basket_amount == 0: continue elif basket_amount < 0: raise StoreError('Item "%s" amount must be non-negative' % item_key) game_offering = game_store_items.get_offering(item_key) minor_price = game_offering.get_price().get_minor_amount() if basket_price != minor_price: raise StoreError('Item "%s" price does not match' % item_key) offering_output = game_offering.output try: basket_item_output = item['output'] if not isinstance(basket_item_output, dict): raise ValueError() if len(offering_output) != len(basket_item_output): raise ValueError() for resource_key, amount in offering_output.items(): if amount != basket_item_output[resource_key]: raise ValueError() resource_keys.add(resource_key) except (KeyError, ValueError): raise StoreError('Offering "%s" output resources do not match' % item_key) self.items[item_key] = { 'price': basket_price, 'amount': basket_amount } total += minor_price * basket_amount for key in resource_keys: resource = game_store_items.get_resource(key) if resource is not None and resource.type == 'own': user_store_items = game_store_items.get_store_user(user) if user_store_items is not None: try: user_item = user_store_items.get_item(key) if user_item['amount'] > 0: raise StoreError('Basket contains an ownable item you already own') except KeyError: pass self.total = total self.completed = False self.completed_time = None UserTransactionsList.get(user).add_transaction(self.id, self)