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
Пример #2
0
    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
Пример #3
0
    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))
Пример #4
0
    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
Пример #5
0
    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))
Пример #6
0
    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)))
Пример #7
0
 def test_get_exchanges_for_place__no(self):
     self.assertEqual(
         resource_exchange_storage.get_exchanges_for_place(self.place_2),
         [])
Пример #8
0
 def test_get_exchanges_for_place__no(self):
     self.assertEqual(resource_exchange_storage.get_exchanges_for_place(self.place_2), [])