server/python/django2/renkanmanager/serializers.py
author ymh <ymh.work@gmail.com>
Mon, 13 Jun 2016 14:23:58 +0200
changeset 613 e00a24b711a0
parent 611 f0f07e2b841f
child 615 f3875fbe206a
permissions -rw-r--r--
make renkanmanager test run locally
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
611
f0f07e2b841f serverside: translation + timestamp handling + logging
durandn
parents: 610
diff changeset
     1
import json, logging, uuid, datetime, time
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
     2
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
     3
from django.db import transaction
593
2ff785d7026c corrected tests and serializer so they can support custom user model, added a readme (to be expanded) with configuration information for the field renkan api will use to render user information
durandn
parents: 592
diff changeset
     4
from django.contrib.auth import get_user_model
2ff785d7026c corrected tests and serializer so they can support custom user model, added a readme (to be expanded) with configuration information for the field renkan api will use to render user information
durandn
parents: 592
diff changeset
     5
from django.conf import settings
611
f0f07e2b841f serverside: translation + timestamp handling + logging
durandn
parents: 610
diff changeset
     6
from django.core.exceptions import ValidationError
f0f07e2b841f serverside: translation + timestamp handling + logging
durandn
parents: 610
diff changeset
     7
from django.utils import dateparse
588
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
     8
from renkanmanager.models import Renkan, Workspace, Revision
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
     9
from rest_framework import serializers
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    10
611
f0f07e2b841f serverside: translation + timestamp handling + logging
durandn
parents: 610
diff changeset
    11
logger = logging.getLogger(__name__)
594
b45eb8244cd9 Added default to the RENKAN_USER_DISPLAY_FIELD setting. Will default to the USERFIELD_NAME for the user model
durandn
parents: 593
diff changeset
    12
RENKAN_USER_DISPLAY_FIELD = getattr(settings, "RENKAN_USER_DISPLAY_FIELD", get_user_model().USERNAME_FIELD)
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    13
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    14
class RenkanSerializer(serializers.Serializer):
589
0ae11aa255a3 Moved python2/django into a django2 folder for consistency + clarified serializers fields name
durandn
parents: 588
diff changeset
    15
    id = serializers.ReadOnlyField(source="renkan_guid")
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    16
    current_revision_id = serializers.SlugRelatedField(source="current_revision", slug_field="revision_guid", read_only=True)
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    17
    workspace_id = serializers.SlugRelatedField(source="workspace", slug_field="workspace_guid", queryset=Workspace.objects, required=False)
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    18
    source_revision_id = serializers.SlugRelatedField(source="source_revision", slug_field="revision_guid", queryset=Revision.objects, required=False)
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    19
    revision_count = serializers.ReadOnlyField()
594
b45eb8244cd9 Added default to the RENKAN_USER_DISPLAY_FIELD setting. Will default to the USERFIELD_NAME for the user model
durandn
parents: 593
diff changeset
    20
    created_by = serializers.SlugRelatedField(source="creator", slug_field=RENKAN_USER_DISPLAY_FIELD, read_only=True)
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    21
    last_updated_by = serializers.SerializerMethodField("get_current_revision_last_updator")
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    22
    title = serializers.CharField(required=False)
588
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
    23
    content = serializers.JSONField(required=False)
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    24
    creation_date = serializers.ReadOnlyField()
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    25
    modification_date = serializers.SerializerMethodField("get_current_revision_modification_date")
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    26
    create_new_revision = serializers.BooleanField(write_only=True, required=False) # only used for updating
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    27
    validation_timestamp = serializers.CharField(write_only=True, required=False) # only used for updating is a content json is not provided
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    28
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    29
    # ADD ERROR HANDLING
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    30
    def get_current_revision_last_updator(self, renkan):
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    31
        last_updator = renkan.current_revision.last_updated_by
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    32
        if last_updator:
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    33
            return getattr(last_updator, RENKAN_USER_DISPLAY_FIELD)
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    34
        else:
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    35
            return ''
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    36
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    37
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    38
    def get_current_revision_modification_date(self, renkan):
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    39
        return renkan.current_revision.modification_date
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    40
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    41
    @transaction.atomic
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    42
    def create(self, validated_data):
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    43
        """
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    44
            Method to create a new Renkan (and its first revision)
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    45
        """
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    46
        creator = validated_data.get('creator')
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    47
        workspace_obj = validated_data.get('workspace', None)
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    48
        source_revision_obj = validated_data.get('source_revision', None)
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    49
        try:
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    50
            return Renkan.objects.create_renkan(
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    51
                creator=creator,
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    52
                title=validated_data.get('title', ''),
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    53
                content=validated_data.get('content', ''),
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    54
                workspace=workspace_obj,
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    55
                source_revision=source_revision_obj
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    56
            )
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    57
        except ValidationError as ve:
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    58
            raise serializers.ValidationError(ve.args[0])
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    59
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    60
    @transaction.atomic
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    61
    def update(self, renkan, validated_data):
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    62
        """
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    63
            Method to update a Renkan object. Creates a new revision if needed
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    64
        """
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    65
        updator = validated_data.get('updator')
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    66
        create_new_revision = validated_data.get("create_new_revision", False)
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    67
        title = validated_data.get('title', renkan.current_revision.title)
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    68
        content = validated_data.get('content', '')
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    69
        if not content:
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    70
            content = renkan.current_revision.content
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    71
            if not 'validation_timestamp' in validated_data:
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    72
                raise serializers.ValidationError("No validation timestamp and no content json to extract it from")
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    73
            validation_timestamp = validated_data.get('validation_timestamp')
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    74
        else:
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    75
            validation_timestamp = json.loads(content).get("updated", "")
611
f0f07e2b841f serverside: translation + timestamp handling + logging
durandn
parents: 610
diff changeset
    76
        if dateparse.parse_datetime(validation_timestamp) < renkan.current_revision.modification_date:
f0f07e2b841f serverside: translation + timestamp handling + logging
durandn
parents: 610
diff changeset
    77
            raise serializers.ValidationError("Provided timestamp is invalid")
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    78
        if title != json.loads(content).get("title", ""):
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    79
            content_dict = json.loads(content)
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    80
            content_dict["title"] = title
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    81
            content = json.dumps(content_dict)
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    82
        try:
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    83
            renkan.save_renkan(updator=updator, timestamp=validation_timestamp, title=title, content=content, create_new_revision=create_new_revision)
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
    84
        except ValidationError as ve:
611
f0f07e2b841f serverside: translation + timestamp handling + logging
durandn
parents: 610
diff changeset
    85
            raise serializers.ValidationError(str(ve.args[0]))
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    86
        return renkan
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    87
589
0ae11aa255a3 Moved python2/django into a django2 folder for consistency + clarified serializers fields name
durandn
parents: 588
diff changeset
    88
    def validate_workspace_id(self, value):
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    89
        if self.instance is not None:
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    90
            raise serializers.ValidationError("You cannot update workspace_guid")
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    91
        return value
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    92
589
0ae11aa255a3 Moved python2/django into a django2 folder for consistency + clarified serializers fields name
durandn
parents: 588
diff changeset
    93
    def validate_source_revision_id(self, value):
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    94
        if self.instance is not None:
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    95
            raise serializers.ValidationError("You cannot update source_revision_guid")
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
    96
        return value
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    97
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
    98
    def validate_content(self, value):
588
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
    99
        try:
611
f0f07e2b841f serverside: translation + timestamp handling + logging
durandn
parents: 610
diff changeset
   100
            loaded_json = json.loads(value)
588
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
   101
        except ValueError:
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
   102
            raise serializers.ValidationError("Content format is not a JSON-serializable")
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
   103
        if (not "nodes" in loaded_json):
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
   104
            raise serializers.ValidationError("Content requires a 'nodes' entry")
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
   105
        if (not "edges" in loaded_json):
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
   106
            raise serializers.ValidationError("Content requires a 'edges' entry")
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
   107
        if (not "views" in loaded_json):
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
   108
            raise serializers.ValidationError("Content requires a 'views' entry")
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
   109
        return value
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
   110
611
f0f07e2b841f serverside: translation + timestamp handling + logging
durandn
parents: 610
diff changeset
   111
    def validate_validation_timestamp(self, value):
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
   112
        logger.debug("%r < %r", dateparse.parse_datetime(value), self.get_current_revision_modification_date(self.instance))
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
   113
611
f0f07e2b841f serverside: translation + timestamp handling + logging
durandn
parents: 610
diff changeset
   114
        if self.instance and dateparse.parse_datetime(value) < self.get_current_revision_modification_date(self.instance):
f0f07e2b841f serverside: translation + timestamp handling + logging
durandn
parents: 610
diff changeset
   115
            raise serializers.ValidationError("Invalid timestamp was provided")
f0f07e2b841f serverside: translation + timestamp handling + logging
durandn
parents: 610
diff changeset
   116
        return value
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   117
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   118
class RevisionSerializer(serializers.Serializer):
589
0ae11aa255a3 Moved python2/django into a django2 folder for consistency + clarified serializers fields name
durandn
parents: 588
diff changeset
   119
    id = serializers.ReadOnlyField(source="revision_guid")
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
   120
    parent_renkan_id = serializers.SlugRelatedField(source="parent_renkan", slug_field='renkan_guid', read_only=True)
589
0ae11aa255a3 Moved python2/django into a django2 folder for consistency + clarified serializers fields name
durandn
parents: 588
diff changeset
   121
    workspace_id = serializers.SerializerMethodField("get_related_workspace_guid")
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   122
    title = serializers.ReadOnlyField()
588
95536fa18d0d Minor adjustements to properly interact with Renkan client
durandn
parents: 587
diff changeset
   123
    content = serializers.JSONField(read_only=True)
593
2ff785d7026c corrected tests and serializer so they can support custom user model, added a readme (to be expanded) with configuration information for the field renkan api will use to render user information
durandn
parents: 592
diff changeset
   124
    renkan_created_by = serializers.SerializerMethodField("get_related_renkan_creator")
2ff785d7026c corrected tests and serializer so they can support custom user model, added a readme (to be expanded) with configuration information for the field renkan api will use to render user information
durandn
parents: 592
diff changeset
   125
    renkan_creation_date = serializers.SerializerMethodField("get_related_renkan_creation_date")
594
b45eb8244cd9 Added default to the RENKAN_USER_DISPLAY_FIELD setting. Will default to the USERFIELD_NAME for the user model
durandn
parents: 593
diff changeset
   126
    revision_created_by = serializers.SlugRelatedField(source="creator", slug_field=RENKAN_USER_DISPLAY_FIELD, read_only=True)
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
   127
    revision_last_updated_by = serializers.SlugRelatedField(source="last_updated_by", slug_field=RENKAN_USER_DISPLAY_FIELD, read_only=True)
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   128
    revision_modification_date = serializers.ReadOnlyField(source="modification_date")
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
   129
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   130
    def get_related_workspace_guid(self, revision):
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
   131
        if revision.parent_renkan.workspace:
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
   132
            return revision.parent_renkan.workspace.workspace_guid
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
   133
        else:
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
   134
            return ''
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
   135
593
2ff785d7026c corrected tests and serializer so they can support custom user model, added a readme (to be expanded) with configuration information for the field renkan api will use to render user information
durandn
parents: 592
diff changeset
   136
    def get_related_renkan_creator(self, revision):
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
   137
        return getattr(revision.parent_renkan.creator, RENKAN_USER_DISPLAY_FIELD)
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
   138
593
2ff785d7026c corrected tests and serializer so they can support custom user model, added a readme (to be expanded) with configuration information for the field renkan api will use to render user information
durandn
parents: 592
diff changeset
   139
    def get_related_renkan_creation_date(self, revision):
610
b9edc1c1538a reworked views and serializers to pass and take into account the "validation timestamp" to the model + refactored models to have a content validation method + adapted tests
durandn
parents: 608
diff changeset
   140
        return revision.parent_renkan.creation_date
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
   141
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   142
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   143
class WorkspaceSerializer(serializers.Serializer):
589
0ae11aa255a3 Moved python2/django into a django2 folder for consistency + clarified serializers fields name
durandn
parents: 588
diff changeset
   144
    id = serializers.ReadOnlyField(source="workspace_guid")
594
b45eb8244cd9 Added default to the RENKAN_USER_DISPLAY_FIELD setting. Will default to the USERFIELD_NAME for the user model
durandn
parents: 593
diff changeset
   145
    workspace_created_by = serializers.SlugRelatedField(source="creator", slug_field=RENKAN_USER_DISPLAY_FIELD, read_only=True)
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   146
    creation_date = serializers.ReadOnlyField()
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   147
    renkan_count = serializers.ReadOnlyField()
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   148
    title = serializers.CharField()
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
   149
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   150
    def create(self, validated_data):
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   151
        creator = validated_data.get('creator')
608
8fd40139827c permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents: 594
diff changeset
   152
        title = validated_data.get('title', '')
8fd40139827c permission implementation has to be client-side and not in the generic api package + deleted duplicate migration
durandn
parents: 594
diff changeset
   153
        workspace = Workspace.objects.create(creator=creator, title=title)
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   154
        workspace.save()
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   155
        return workspace
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
   156
587
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   157
    def update(self, workspace, validated_data):
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   158
        workspace.title = validated_data.get('title', '')
fb0041aa74d3 transfer work on renkanmanager into a renkan/server/python2 folder: reworked models, implemented simple API basic permissions, wrote tests
durandn
parents:
diff changeset
   159
        workspace.save()
613
e00a24b711a0 make renkanmanager test run locally
ymh <ymh.work@gmail.com>
parents: 611
diff changeset
   160
        return workspace