def clean(self): cleaned_data = super(UserForm, self).clean() place_1 = places_storage.get(int(cleaned_data['place_1'])) place_2 = places_storage.get(int(cleaned_data['place_2'])) if roads_storage.get_by_places(place_1, place_2) is None: raise ValidationError(u'Обмениваться ресурсами могут только города связаные дорогой') if (c.PLACE_MAX_BILLS_NUMBER <= len(resource_exchange_storage.get_exchanges_for_place(place_1)) or c.PLACE_MAX_BILLS_NUMBER <= len(resource_exchange_storage.get_exchanges_for_place(place_2)) ): raise ValidationError(u'Один город может поддерживать не более чем %(max_exchanges)d активных законов' % {'max_exchanges': c.PLACE_MAX_BILLS_NUMBER}) resource_1 = cleaned_data.get('resource_1') resource_2 = cleaned_data.get('resource_2') if resource_1 is None: raise ValidationError(u'Не указан ресурс от первого города') if resource_2 is None: raise ValidationError(u'Не указан ресурс от второго города') if resource_1 not in ALLOWED_EXCHANGE_TYPES: raise ValidationError(u'Нельзя заключить договор на обмен ресурса «%s»' % resource_1.text) if resource_2 not in ALLOWED_EXCHANGE_TYPES: raise ValidationError(u'Нельзя заключить договор на обмен ресурса «%s»' % resource_2.text) if resource_1.parameter == resource_2.parameter: raise ValidationError(u'Нельзя заключить договор на обмен одинаковыми ресурсами') return cleaned_data
def clean(self): cleaned_data = super(UserForm, self).clean() place = places_storage.get(int(cleaned_data['place'])) if (c.PLACE_MAX_BILLS_NUMBER <= len(resource_exchange_storage.get_exchanges_for_place(place)) ): raise ValidationError(u'Один город может поддерживать не более чем %(max_exchanges)d активных закона' % {'max_exchanges': c.PLACE_MAX_BILLS_NUMBER}) return cleaned_data
def _update_powers(self, powers, parameter): from the_tale.game.map.places.storage import resource_exchange_storage for exchange in resource_exchange_storage.get_exchanges_for_place(self): resource_1, resource_2, place_2 = exchange.get_resources_for_place(self) if resource_1.parameter == parameter: powers.append((place_2.name if place_2 is not None else resource_2.text, -resource_1.amount * resource_1.direction)) if resource_2.parameter == parameter: powers.append((place_2.name if place_2 is not None else resource_1.text, resource_2.amount * resource_2.direction))
def clean(self): cleaned_data = super(UserForm, self).clean() place_1 = places_storage.get(int(cleaned_data['place_1'])) place_2 = places_storage.get(int(cleaned_data['place_2'])) if roads_storage.get_by_places(place_1, place_2) is None: raise ValidationError( u'Обмениваться ресурсами могут только города связаные дорогой') if (c.PLACE_MAX_BILLS_NUMBER <= len( resource_exchange_storage.get_exchanges_for_place(place_1)) or c.PLACE_MAX_BILLS_NUMBER <= len( resource_exchange_storage.get_exchanges_for_place(place_2)) ): raise ValidationError( u'Один город может поддерживать не более чем %(max_exchanges)d активных законов' % {'max_exchanges': c.PLACE_MAX_BILLS_NUMBER}) resource_1 = cleaned_data.get('resource_1') resource_2 = cleaned_data.get('resource_2') if resource_1 is None: raise ValidationError(u'Не указан ресурс от первого города') if resource_2 is None: raise ValidationError(u'Не указан ресурс от второго города') if resource_1 not in ALLOWED_EXCHANGE_TYPES: raise ValidationError( u'Нельзя заключить договор на обмен ресурса «%s»' % resource_1.text) if resource_2 not in ALLOWED_EXCHANGE_TYPES: raise ValidationError( u'Нельзя заключить договор на обмен ресурса «%s»' % resource_2.text) if resource_1.parameter == resource_2.parameter: raise ValidationError( u'Нельзя заключить договор на обмен одинаковыми ресурсами') return cleaned_data
def _update_powers(self, powers, parameter): from the_tale.game.map.places.storage import resource_exchange_storage for exchange in resource_exchange_storage.get_exchanges_for_place( self): resource_1, resource_2, place_2 = exchange.get_resources_for_place( self) if resource_1.parameter == parameter: powers.append( (place_2.name if place_2 is not None else resource_2.text, -resource_1.amount * resource_1.direction)) if resource_2.parameter == parameter: powers.append( (place_2.name if place_2 is not None else resource_1.text, resource_2.amount * resource_2.direction))
def test_get_exchanges_for_place__multiple(self): exchange_1 = ResourceExchangePrototype.create(place_1=self.place_1, place_2=self.place_2, resource_1=self.resource_1, resource_2=self.resource_2, bill=None) ResourceExchangePrototype.create(place_1=self.place_1, place_2=self.place_3, resource_1=self.resource_1, resource_2=self.resource_2, bill=None) exchange_3 = ResourceExchangePrototype.create(place_1=self.place_2, place_2=self.place_3, resource_1=self.resource_1, resource_2=self.resource_2, bill=None) self.assertEqual(set(exchange.id for exchange in resource_exchange_storage.get_exchanges_for_place(self.place_2)), set((exchange_1.id, exchange_3.id)))
def test_get_exchanges_for_place__no(self): self.assertEqual( resource_exchange_storage.get_exchanges_for_place(self.place_2), [])
def test_get_exchanges_for_place__no(self): self.assertEqual(resource_exchange_storage.get_exchanges_for_place(self.place_2), [])