Skip to content

Commit 339ae56

Browse files
author
nxexox
committed
Bug Fixes for 0.3.5 version
1 parent 92a0689 commit 339ae56

19 files changed

+89
-48
lines changed

docs/release-notes.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,16 @@ Medium version numbers (0.x.0) may include API changes, in line with the [deprec
88

99
Major version numbers (x.0.0) are reserved for substantial project milestones.
1010

11+
### 0.3.5
12+
13+
**Date:** [22th Jule 2019]
14+
15+
* Fix for current work [`source`][SourceFieldAttribute] attribute for base fields class.
16+
* Fix exceptions `__str__` method.
17+
* Fix `GenericViews` `MRO`.
18+
* Added unbound `response_class` from all views.
19+
* Fix `ValidationError` arguments in views.
20+
1121
### 0.3.4
1222

1323
**Date:** [22th Jule 2019]

rest_framework/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
__/ |
99
|___/
1010
"""
11-
VERSION = (0, 3, 4)
11+
VERSION = (0, 3, 5)
1212

1313
__title__ = 'Python-Rest-Framework'
1414
__author__ = 'Deys Timofey'
1515
__email__ = 'nxexox@gmail.com'
16-
__copyright__ = 'Copyright (c) 2018 Deys Timofey'
16+
__copyright__ = 'Copyright (c) 2019 Deys Timofey'
1717
__license__ = 'Apache License 2.0'
1818
__url__ = 'https://github.com/nxexox/python-rest-framework'
1919
__version__ = '.'.join(map(str, VERSION))

rest_framework/exceptions.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,6 @@ def __init__(self, detail=None, status=400):
2727
"""
2828
self.detail = detail
2929
self.status = status
30+
31+
def __str__(self):
32+
return 'rest_framework.exceptions.ApiException(detail={}, code={})'.format(self.detail, self.status)

rest_framework/serializers/exceptions.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,8 @@ def __init__(self, code=None, *args, **kwargs):
2121
"""
2222
super().__init__(*args, **kwargs)
2323
self.code = code
24+
25+
def __str__(self):
26+
return 'rest_framework.serializers.exceptions.ValidationError(code={}, detail={}, code={})'.format(
27+
self.code, self.detail, self.status
28+
)

rest_framework/serializers/fields.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,8 @@ def __init__(self, required=True, default=None, label=None, validators=None,
103103
def __deepcopy__(self, memo={}):
104104
return self.__class__(
105105
required=self.required, default=self.default, label=self.label,
106-
validators=self._src_validators, error_messages=self._src_messages
106+
validators=self._src_validators, error_messages=self._src_messages,
107+
source=self.source
107108
)
108109

109110
def bind(self, field_name, parent):
@@ -394,7 +395,8 @@ def __deepcopy__(self, memo={}):
394395
required=self.required, default=self.default, label=self.label,
395396
validators=self._src_validators, error_messages=self._src_messages,
396397
min_length=self.min_length, max_length=self.max_length,
397-
trim_whitespace=self.trim_whitespace, allow_blank=self.allow_blank
398+
trim_whitespace=self.trim_whitespace, allow_blank=self.allow_blank,
399+
source=self.source
398400
)
399401

400402
def run_validation(self, data=None):
@@ -487,7 +489,8 @@ def __deepcopy__(self, memo={}):
487489
return self.__class__(
488490
required=self.required, default=self.default, label=self.label,
489491
validators=self._src_validators, error_messages=self._src_messages,
490-
min_value=self.min_value, max_value=self.max_value
492+
min_value=self.min_value, max_value=self.max_value,
493+
source=self.source
491494
)
492495

493496
def to_internal_value(self, data):
@@ -562,7 +565,8 @@ def __deepcopy__(self, memo={}):
562565
return self.__class__(
563566
required=self.required, default=self.default, label=self.label,
564567
validators=self._src_validators, error_messages=self._src_messages,
565-
min_value=self.min_value, max_value=self.max_value
568+
min_value=self.min_value, max_value=self.max_value,
569+
source=self.source
566570
)
567571

568572
def to_internal_value(self, data):
@@ -822,7 +826,7 @@ def __deepcopy__(self, memo={}):
822826
required=self.required, default=self.default, label=self.label,
823827
validators=self._src_validators, error_messages=self._src_messages,
824828
child=self.child, min_length=self.min_length, max_length=self.max_length,
825-
allow_empty=self.allow_empty
829+
allow_empty=self.allow_empty, source=self.source
826830
)
827831

828832
def to_internal_value(self, data):
@@ -892,7 +896,8 @@ def __deepcopy__(self, memo={}):
892896
return self.__class__(
893897
required=self.required, default=self.default, label=self.label,
894898
validators=self._src_validators, error_messages=self._src_messages,
895-
format=getattr(self, 'format'), input_format=getattr(self, 'input_format')
899+
format=getattr(self, 'format'), input_format=getattr(self, 'input_format'),
900+
source=self.source
896901
)
897902

898903
def to_internal_value(self, data):
@@ -991,7 +996,8 @@ def __deepcopy__(self, memo={}):
991996
return self.__class__(
992997
required=self.required, default=self.default, label=self.label,
993998
validators=self._src_validators, error_messages=self._src_messages,
994-
format=getattr(self, 'format', None), input_format=getattr(self, 'input_format')
999+
format=getattr(self, 'format', None), input_format=getattr(self, 'input_format'),
1000+
source=self.source
9951001
)
9961002

9971003
def to_internal_value(self, data):
@@ -1088,7 +1094,8 @@ def __deepcopy__(self, memo={}):
10881094
return self.__class__(
10891095
required=self.required, default=self.default, label=self.label,
10901096
validators=self._src_validators, error_messages=self._src_messages,
1091-
format=getattr(self, 'format'), input_format=getattr(self, 'input_format')
1097+
format=getattr(self, 'format'), input_format=getattr(self, 'input_format'),
1098+
source=self.source
10921099
)
10931100

10941101
def to_internal_value(self, data):
@@ -1220,7 +1227,7 @@ def __deepcopy__(self, memo={}):
12201227
return self.__class__(
12211228
required=self.required, default=self.default, label=self.label,
12221229
validators=self._src_validators, error_messages=self._src_messages,
1223-
child=self.child
1230+
child=self.child, source=self.source
12241231
)
12251232

12261233
def to_internal_value(self, data):
@@ -1305,7 +1312,8 @@ def __deepcopy__(self, memo={}):
13051312
return self.__class__(
13061313
required=self.required, default=self.default, label=self.label,
13071314
validators=self._src_validators, error_messages=self._src_messages,
1308-
method_name_get=self.method_name_get, method_name_pop=self.method_name_pop
1315+
method_name_get=self.method_name_get, method_name_pop=self.method_name_pop,
1316+
source=self.source
13091317
)
13101318

13111319
def bind(self, field_name, parent):

rest_framework/serializers/serializers.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
LIST_SERIALIZER_KWARGS = (
2424
'required', 'default', 'label', 'error_messages', 'allow_empty',
25-
'instance', 'data', 'min_length', 'max_length'
25+
'instance', 'data', 'min_length', 'max_length', 'source'
2626
) # The argument list for the ListSerializer to control the creation of many=True.
2727

2828

@@ -126,7 +126,7 @@ def __new__(cls, *args, **kwargs):
126126
return super(BaseSerializer, cls).__new__(cls)
127127

128128
def __deepcopy__(self, memo={}):
129-
return self.__class__(instance=self.instance, data=self.data)
129+
return self.__class__(instance=self.instance, data=self.data, source=self.source)
130130

131131
@classmethod
132132
def many_init(cls, *args, **kwargs):
@@ -313,8 +313,9 @@ def to_representation(self, instance):
313313
"""
314314
res = OrderedDict() # Attributes storage.
315315

316-
for field_name, field_val in six.iteritems(self.fields):
316+
for _, field_val in six.iteritems(self.fields):
317317
# TODO: mini hack
318+
field_name = field_val._get_field_name()
318319
if not isinstance(field_val, SerializerMethodField):
319320
# We try to get the attribute.
320321
try:
@@ -361,7 +362,8 @@ def _field_validation(self, fields_dict, data):
361362
"""
362363
validated_data, errors = OrderedDict(), OrderedDict()
363364
# Running through the fields.
364-
for field_name, field_obj in six.iteritems(fields_dict):
365+
for _, field_obj in six.iteritems(fields_dict):
366+
field_name = field_obj._get_field_name()
365367
try:
366368
# Transform to python type and validate each field.
367369
validated_val = field_obj.run_validation(data.get(field_name, None))
@@ -516,7 +518,8 @@ def __init__(self, child=None, allow_empty=None, *args, **kwargs):
516518
def __deepcopy__(self, memo={}):
517519
return self.__class__(
518520
instance=self.instance, data=self.data,
519-
child=self.child, allow_empty=self.allow_empty
521+
child=self.child, allow_empty=self.allow_empty,
522+
source=self.source
520523
)
521524

522525
def to_internal_value(self, data):

rest_framework/views/aiohttp/generics.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class GetValidJsonApiGenericView(AioHTTPApiView, GetValidJsonMixin):
3333
pass
3434

3535

36-
class ApiGenericView(AioHTTPApiView, GetResponseMixin, GetSerializerMixin, GetValidJsonMixin):
36+
class ApiGenericView(AioHTTPApiView, GetResponseMixin, GetValidJsonMixin, GetSerializerMixin):
3737
"""
3838
Generic Api view for GetResponse, GetSerializer, GetValidJsonMixin methods.
3939

rest_framework/views/aiohttp/mixins.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def get_valid_json(self, parse_query=False, raise_exception=True):
3737
data.update(request_json)
3838
except JSONDecodeError:
3939
if raise_exception:
40-
raise ValidationError('Not valid json.')
40+
raise ValidationError(detail='Not valid json.')
4141

4242
# Validate body request.
4343
serializer = self.get_request_serializer()

rest_framework/views/aiohttp/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,4 @@ def _dispatch(self, method, *args, **kwargs):
7777
return result
7878
except ApiException as e:
7979
# TODO: Not security. e.detail maybe anything
80-
return self.response_class({'errors': e.detail}, status=e.status or 400)
80+
return self.response_class.__func__(detail={'errors': e.detail}, status=e.status or 400)

rest_framework/views/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def _dispatch(self, method, *args, **kwargs):
4343
return method(*args, **kwargs)
4444
except ApiException as e:
4545
# TODO: Not security. e.detail maybe anything
46-
return self.response_class(
46+
return self.response_class.__func__(
4747
{'errors': e.detail},
4848
status=e.status or 400,
4949
content_type=self.response_content_type

0 commit comments

Comments
 (0)