From 972d6d454003b8195d715f93ff881a9224cb28b3 Mon Sep 17 00:00:00 2001
From: e-cloud <saintscott119@gmail.com>
Date: Mon, 12 Aug 2019 22:25:58 +0800
Subject: [PATCH] feat: upgrade to use marshmallow 3.0.0rc9

marshmallow 3.0.0 use strict: True by default for schem

also patch EnumField, revert it once https://github.com/justanr/marshmallow_enum/issues/23 is resolved
---
 app/models/enum_field.py            | 7 +++++++
 app/resources/auth/schemas.py       | 2 +-
 app/resources/complaints/schemas.py | 8 +++-----
 app/resources/uploads/schemas.py    | 4 +---
 requirements.txt                    | 2 +-
 requirements/base.txt               | 1 +
 6 files changed, 14 insertions(+), 10 deletions(-)
 create mode 100644 app/models/enum_field.py

diff --git a/app/models/enum_field.py b/app/models/enum_field.py
new file mode 100644
index 0000000..d2c54fb
--- /dev/null
+++ b/app/models/enum_field.py
@@ -0,0 +1,7 @@
+from marshmallow_enum import EnumField as BaseEnumField
+
+
+# todo: revert it once https://github.com/justanr/marshmallow_enum/issues/23 is resolved
+class EnumField(BaseEnumField):
+    def _deserialize(self, value, attr, data, **kwargs):
+        super(EnumField, self)._deserialize(value, attr, data)
diff --git a/app/resources/auth/schemas.py b/app/resources/auth/schemas.py
index 5211882..20f35fc 100644
--- a/app/resources/auth/schemas.py
+++ b/app/resources/auth/schemas.py
@@ -1,8 +1,8 @@
 from flask_marshmallow import Schema
 from marshmallow import fields
-from marshmallow_enum import EnumField
 
 from .models import EnumGender
+from app.models.enum_field import EnumField
 
 
 class CreateAuthClientParameters(Schema):
diff --git a/app/resources/complaints/schemas.py b/app/resources/complaints/schemas.py
index ed143e9..d548547 100644
--- a/app/resources/complaints/schemas.py
+++ b/app/resources/complaints/schemas.py
@@ -1,11 +1,11 @@
 from flask_marshmallow.sqla import TableSchema
 from marshmallow import fields
 from marshmallow import Schema
-from marshmallow_enum import EnumField
 
 from .models import Complaint
 from .models import EnumComplaintState
 from .models import EnumComplaintType
+from app.models.enum_field import EnumField
 from app.resources.users.schemas import UserSchema
 
 
@@ -31,11 +31,9 @@ class ComplaintSchema(Schema):
     trade_info = fields.String(description='tradeInfo')
     relatedProducts = fields.String(description='relatedProducts')
     purchase_timestamp = fields.DateTime(description='purchase_timestamp')
-    invoice_files = fields.List(
-        fields.String(), description='uploaded invoice file list'
-    )
+    invoice_files = fields.List(fields.URL(), description='uploaded invoice file list')
     evidence_files = fields.List(
-        fields.String(), description='uploaded evidence file list'
+        fields.URL(), description='uploaded evidence file list'
     )
 
 
diff --git a/app/resources/uploads/schemas.py b/app/resources/uploads/schemas.py
index 73d9e43..6574326 100644
--- a/app/resources/uploads/schemas.py
+++ b/app/resources/uploads/schemas.py
@@ -1,9 +1,9 @@
 from flask_marshmallow import Schema
 from marshmallow import ValidationError
-from marshmallow_enum import EnumField
 
 from .models import EnumUploadFileType
 from .models import FileField
+from app.models.enum_field import EnumField
 
 
 def file_validate(file):
@@ -12,8 +12,6 @@ def file_validate(file):
 
 
 class FileUploadFormParameters(Schema):
-    class Meta:
-        strict = True
 
     upload_type = EnumField(
         EnumUploadFileType,
diff --git a/requirements.txt b/requirements.txt
index 7016c4c..14f627c 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -33,7 +33,7 @@ jsonschema==3.0.2
 lazy-object-proxy==1.4.1
 Mako==1.1.0
 MarkupSafe==1.1.1
-marshmallow==2.19.5
+marshmallow==3.0.0rc9
 marshmallow-enum==1.4.1
 marshmallow-jsonschema==0.6.0
 marshmallow-sqlalchemy==0.17.0
diff --git a/requirements/base.txt b/requirements/base.txt
index a0fb310..e84cf0b 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -9,6 +9,7 @@ flask-migrate~=2.5.0
 flask-rest-api~=0.16.1
 flask-sqlalchemy~=2.4.0
 flask~=1.1.0
+marshmallow==3.0.0rc9
 marshmallow-enum~=1.4.1
 marshmallow-jsonschema~=0.6.0
 marshmallow-sqlalchemy~=0.17.0