from . import fields
from .base import Model
from .custom_response import CustomResponseMixin
from .incentives import Schedule, Script, ScriptEndpoint, Trigger
class ScriptTrace(CustomResponseMixin, Model):
    """
[docs]    :ivar status: :class:`~syncano.models.fields.ChoiceField`
    :ivar links: :class:`~syncano.models.fields.HyperlinkedField`
    :ivar executed_at: :class:`~syncano.models.fields.DateTimeField`
    :ivar result: :class:`~syncano.models.fields.StringField`
    :ivar duration: :class:`~syncano.models.fields.IntegerField`
    """
    STATUS_CHOICES = (
        {'display_name': 'Success', 'value': 'success'},
        {'display_name': 'Failure', 'value': 'failure'},
        {'display_name': 'Timeout', 'value': 'timeout'},
        {'display_name': 'Processing', 'value': 'processing'},
        {'display_name': 'Pending', 'value': 'pending'},
    )
    status = fields.ChoiceField(choices=STATUS_CHOICES, read_only=True, required=False)
    links = fields.LinksField()
    executed_at = fields.DateTimeField(read_only=True, required=False)
    result = fields.JSONField(read_only=True, required=False)
    duration = fields.IntegerField(read_only=True, required=False)
    class Meta:
        parent = Script
        endpoints = {
            'detail': {
                'methods': ['get'],
                'path': '/traces/{id}/',
            },
            'list': {
                'methods': ['get', 'post'],
                'path': '/traces/',
            }
        }
class ScheduleTrace(Model):
    """ 
[docs]    :ivar status: :class:`~syncano.models.fields.ChoiceField`
    :ivar links: :class:`~syncano.models.fields.HyperlinkedField`
    :ivar executed_at: :class:`~syncano.models.fields.DateTimeField`
    :ivar result: :class:`~syncano.models.fields.StringField`
    :ivar duration: :class:`~syncano.models.fields.IntegerField`
    """
    STATUS_CHOICES = (
        {'display_name': 'Success', 'value': 'success'},
        {'display_name': 'Failure', 'value': 'failure'},
        {'display_name': 'Timeout', 'value': 'timeout'},
        {'display_name': 'Pending', 'value': 'pending'},
    )
    status = fields.ChoiceField(choices=STATUS_CHOICES, read_only=True, required=False)
    links = fields.LinksField()
    executed_at = fields.DateTimeField(read_only=True, required=False)
    result = fields.StringField(read_only=True, required=False)
    duration = fields.IntegerField(read_only=True, required=False)
    class Meta:
        parent = Schedule
        endpoints = {
            'detail': {
                'methods': ['get'],
                'path': '/traces/{id}/',
            },
            'list': {
                'methods': ['get', 'post'],
                'path': '/traces/',
            }
        }
class TriggerTrace(Model):
    """ 
[docs]    :ivar status: :class:`~syncano.models.fields.ChoiceField`
    :ivar links: :class:`~syncano.models.fields.HyperlinkedField`
    :ivar executed_at: :class:`~syncano.models.fields.DateTimeField`
    :ivar result: :class:`~syncano.models.fields.StringField`
    :ivar duration: :class:`~syncano.models.fields.IntegerField`
    """
    STATUS_CHOICES = (
        {'display_name': 'Success', 'value': 'success'},
        {'display_name': 'Failure', 'value': 'failure'},
        {'display_name': 'Timeout', 'value': 'timeout'},
        {'display_name': 'Pending', 'value': 'pending'},
    )
    LINKS = (
        {'type': 'detail', 'name': 'self'},
    )
    status = fields.ChoiceField(choices=STATUS_CHOICES, read_only=True, required=False)
    links = fields.LinksField()
    executed_at = fields.DateTimeField(read_only=True, required=False)
    result = fields.StringField(read_only=True, required=False)
    duration = fields.IntegerField(read_only=True, required=False)
    class Meta:
        parent = Trigger
        endpoints = {
            'detail': {
                'methods': ['get'],
                'path': '/traces/{id}/',
            },
            'list': {
                'methods': ['get', 'post'],
                'path': '/traces/',
            }
        }
class ScriptEndpointTrace(CustomResponseMixin, Model):
    """ 
[docs]    :ivar status: :class:`~syncano.models.fields.ChoiceField`
    :ivar links: :class:`~syncano.models.fields.HyperlinkedField`
    :ivar executed_at: :class:`~syncano.models.fields.DateTimeField`
    :ivar result: :class:`~syncano.models.fields.StringField`
    :ivar duration: :class:`~syncano.models.fields.IntegerField`
    """
    STATUS_CHOICES = (
        {'display_name': 'Success', 'value': 'success'},
        {'display_name': 'Failure', 'value': 'failure'},
        {'display_name': 'Timeout', 'value': 'timeout'},
        {'display_name': 'Pending', 'value': 'pending'},
    )
    status = fields.ChoiceField(choices=STATUS_CHOICES, read_only=True, required=False)
    links = fields.LinksField()
    executed_at = fields.DateTimeField(read_only=True, required=False)
    result = fields.JSONField(read_only=True, required=False)
    duration = fields.IntegerField(read_only=True, required=False)
    class Meta:
        parent = ScriptEndpoint
        endpoints = {
            'detail': {
                'methods': ['get'],
                'path': '/traces/{id}/',
            },
            'list': {
                'methods': ['get', 'post'],
                'path': '/traces/',
            }
        }