Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
wbfsm / wbfsm / serializers.py
Size: Mime:
from rest_framework import serializers
from rest_framework.reverse import reverse
from django_fsm_log.models import StateLog

class FSMActionField(serializers.ReadOnlyField):
    ''' Shows all available FSM Actions for the current user '''

    def __init__(self, url_prefix, *args, **kwargs):
        self.url_prefix = url_prefix
        super().__init__(*args, **kwargs)

    def get_attribute(self, obj):
        request = self.context.get('request', None)
        if request:
            available_transitions = obj.get_available_user_status_transitions(request.user)
            return {transition.name :reverse(f'{self.url_prefix}-{transition.name}', args=[obj.id], request=request) for transition in available_transitions}
        return None

class FSMHistoryField(serializers.ReadOnlyField):
    ''' Shows the history of all FSM Actions '''

    def get_attribute(self, obj):
        rv = list()
        for log in StateLog.objects.for_(obj):
            log_by = None
            log_by_repr = None
            if log.by:
                if hasattr(log.by, 'profile'):
                    # NOTE: Only if wbcrm is installed
                    log_by = log.by.profile.id
                    log_by_repr = str(log.by.profile)
                else:
                    log_by = log.by.id
                    log_by_repr = str(log.by)
            rv.append({
                'timestamp': log.timestamp,
                'by': log_by,
                'by_repr': log_by_repr,
                'status': log.state,
                'description': log.description,
                'data': log.data
            })
        return rv