class LootSerializer(CommonModelSerializer): """ Serializer des butins """ campaign = create_model_serializer(Campaign)(read_only=True, label=_("campagne")) item = create_model_serializer(Item)(read_only=True, label=_("objet"))
class CharacterEffectSerializer(CommonModelSerializer): """ Serializer des butins """ character = SimpleCharacterSerializer(read_only=True, label=_("personnage")) effect = create_model_serializer(Effect)(read_only=True, label=_("effet")) damages = create_model_serializer(DamageHistory)(read_only=True, many=True, label=_("dégâts"))
class CampaignEffectSerializer(CommonModelSerializer): """ Serializer des butins """ campaign = create_model_serializer(Campaign)(read_only=True, label=_("campagne")) effect = create_model_serializer(Effect)(read_only=True, label=_("effet")) damages = create_model_serializer(DamageHistory)(read_only=True, many=True, label=_("dégâts"))
class UserInfosSerializer(CommonModelSerializer): """ Serializer de la synthèse des informations utilisateur (groupes, permissions et métadonnées) """ username = serializers.CharField(required=False) password = serializers.CharField(required=False, write_only=True, style={'input_type': 'password'}) groups = create_model_serializer(Group, exclude=['permissions'])(many=True) permissions = serializers.SerializerMethodField() def get_permissions(self, user): permissions = {} permission_serializer_class = create_model_serializer( Permission, fields=['id', 'codename', 'name']) for group in user.groups.all(): for permission in group.permissions.all(): if permission.id not in permissions: permissions[permission.id] = permission_serializer_class( permission).data for permission in user.user_permissions.all(): if permission.id not in permissions: permissions[permission.id] = permission_serializer_class( permission).data return sorted(permissions.values(), key=itemgetter('id')) def get_metadata(self, user): return user.get_metadata()
class FightHistorySerializer(CommonModelSerializer): """ Serializer de sortie pour les attaques """ attacker = SimpleCharacterSerializer(read_only=True, label=_("attaquant")) defender = SimpleCharacterSerializer(read_only=True, label=_("défenseur")) damage = create_model_serializer(DamageHistory)(read_only=True, label=_("dégâts"))
class EquipmentSerializer(CommonModelSerializer): """ Serializer de sortie pour afficher des équipements """ character = SimpleCharacterSerializer(read_only=True, label=_("personnage")) item = create_model_serializer(Item, exclude=('effects', 'ammunitions'))(read_only=True, label=_("objet"))
class ClaimSerializer(CommonModelSerializer): power = serializers.IntegerField() points = serializers.IntegerField() claims = serializers.IntegerField() player = create_model_serializer(Player, exclude=( 'password', 'groups', 'user_permissions', ))()
class NextTurnSerializer(BaseCustomSerializer): """ Serializer des données de fin de tour """ campaign = create_model_serializer(Campaign)(read_only=True, label=_("campagne")) character = SimpleCharacterSerializer(read_only=True, label=_("personnage")) damages = DamageHistorySerializer(read_only=True, many=True, label=_("dégâts"))
def get_permissions(self, user): permissions = {} permission_serializer_class = create_model_serializer( Permission, fields=['id', 'codename', 'name']) for group in user.groups.all(): for permission in group.permissions.all(): if permission.id not in permissions: permissions[permission.id] = permission_serializer_class( permission).data for permission in user.user_permissions.all(): if permission.id not in permissions: permissions[permission.id] = permission_serializer_class( permission).data return sorted(permissions.values(), key=itemgetter('id'))
def _setUpClass(cls): """ Ajout de l'admin user et des schémas d'url pour les actions de detail & list """ super(APITestCase, cls).setUpClass() cls.user_admin = User.objects.filter(username='******').first() if not cls.user_admin: cls.user_admin = User.objects.create_superuser( 'admin', '*****@*****.**', 'admin') if not namespace: cls.url_list_api = '{}-list'.format(model_name) cls.url_detail_api = '{}-detail'.format(model_name) else: cls.url_list_api = '{}:{}-list'.format(namespace, model_name) cls.url_detail_api = '{}:{}-detail'.format(namespace, model_name) cls.serializer = serializer or create_model_serializer( model, hyperlinked=False)
def _setUpClass(cls): """ Added admin user and url schematics for detail and list actions """ super(APITestCase, cls).setUpClass() cls.user_admin = User.objects.filter(username='******').first() if not cls.user_admin: cls.user_admin = User.objects.create_superuser( 'admin', '*****@*****.**', 'admin') if not namespace: cls.url_list_api = '{}-list'.format(model_name) cls.url_detail_api = '{}-detail'.format(model_name) else: cls.url_list_api = '{}:{}-list'.format(namespace, model_name) cls.url_detail_api = '{}:{}-detail'.format(namespace, model_name) cls.serializer = serializer or create_model_serializer( model, hyperlinked=False)
from django.utils.translation import gettext_lazy as _ from rest_framework import serializers from rest_framework.exceptions import PermissionDenied, ValidationError from rest_framework.generics import get_object_or_404 from fallout.enums import * # noqa from fallout.models import * # noqa # Désactive les listes déroulantes sur les champs de relations disable_relation_fields(*MODELS) # Création des APIs REST standard pour les modèles de cette application router, all_serializers, all_viewsets = create_api(*MODELS) # Serializer sans statistiques pour le personnage BaseCharacterSerializer = create_model_serializer( Character, exclude=tuple(LIST_EDITABLE_STATS)) class SimpleCharacterSerializer(BaseCharacterSerializer): """ Serializer simplifié pour les personnages """ current_charge = serializers.FloatField() used_skill_points = serializers.FloatField() next_required_experience = serializers.IntegerField() previous_required_experience = serializers.IntegerField() required_experience = serializers.IntegerField() labels = serializers.DictField() def is_authorized(request, campaign):
from fmv.models import MODELS, Choice, Save, Scenario, Scene DEFAULT_CONFIG.update(permissions=(IsAuthenticatedOrReadOnly, )) # Surcharge des options de base CONFIGS.update({ Save: dict(many_to_many=True, depth=1, exclude=('scenes', )), }) # Création des APIs REST standard pour les modèles de cette application router, all_serializers, all_viewsets = create_api(*MODELS) # Serializers ChoiceSerializer = create_model_serializer(Choice) SceneSerializer = create_model_serializer(Scene) class SaveWithChoicesSerializer(all_serializers[Save]): """ Serializer de la sauvegarde avec les choix possibles """ choices = serializers.SerializerMethodField() def get_choices(self, save): choices = [] query = Choice.objects.filter(scene_from_id=save.scene_id).prefetch_related('conditions').order_by('order') for choice in query: if choice.check_save(save): choices.append(choice)