From 2d3cc6974164a5144aaf93fb7d52ad104ffe69e9 Mon Sep 17 00:00:00 2001 From: Artur Barseghyan Date: Wed, 1 Dec 2021 21:50:24 +0100 Subject: [PATCH] Some updates --- examples/simple/books/__init__.py | 5 - .../commands/books_create_test_data.py | 3 - examples/simple/books/models/__init__.py | 1 + examples/simple/books/models/author.py | 7 +- examples/simple/books/models/book.py | 12 +- examples/simple/books/models/order.py | 9 +- examples/simple/books/models/order_line.py | 8 +- examples/simple/books/models/payment.py | 89 ++++++++++ examples/simple/books/models/profile.py | 8 +- examples/simple/books/models/publisher.py | 6 +- examples/simple/books/models/tag.py | 4 +- ...est_framework_extensions_routers_compat.py | 10 +- examples/simple/books/serializers/payment.py | 165 ++++++++++++++++++ examples/simple/books/urls.py | 3 +- src/rest_framework_tricks/__init__.py | 7 +- src/rest_framework_tricks/apps.py | 3 +- src/rest_framework_tricks/filters/__init__.py | 3 +- src/rest_framework_tricks/filters/ordering.py | 3 +- .../models/fields/__init__.py | 3 +- .../models/fields/nested_proxy.py | 8 +- .../serializers/__init__.py | 3 +- .../serializers/nested_proxy.py | 17 +- src/rest_framework_tricks/tests/__init__.py | 12 -- src/rest_framework_tricks/tests/base.py | 6 +- .../tests/test_nested_proxy_field.py | 19 +- .../tests/test_ordering_filter.py | 19 +- src/rest_framework_tricks/tests/test_utils.py | 10 -- src/rest_framework_tricks/utils.py | 5 +- 28 files changed, 296 insertions(+), 152 deletions(-) create mode 100644 examples/simple/books/models/payment.py create mode 100644 examples/simple/books/serializers/payment.py diff --git a/examples/simple/books/__init__.py b/examples/simple/books/__init__.py index 60b473e..e69de29 100644 --- a/examples/simple/books/__init__.py +++ b/examples/simple/books/__init__.py @@ -1,5 +0,0 @@ -""" -Books app. -""" - -default_app_config = 'books.apps.Config' diff --git a/examples/simple/books/management/commands/books_create_test_data.py b/examples/simple/books/management/commands/books_create_test_data.py index ae5df91..de23994 100644 --- a/examples/simple/books/management/commands/books_create_test_data.py +++ b/examples/simple/books/management/commands/books_create_test_data.py @@ -1,9 +1,6 @@ """ Create test book data. """ - -from __future__ import unicode_literals - from django.core.management.base import BaseCommand, CommandError import factories diff --git a/examples/simple/books/models/__init__.py b/examples/simple/books/models/__init__.py index 4f60dfc..516e12f 100644 --- a/examples/simple/books/models/__init__.py +++ b/examples/simple/books/models/__init__.py @@ -2,6 +2,7 @@ from .book import * from .order import * from .order_line import * +from .payment import * from .profile import * from .publisher import * from .tag import * diff --git a/examples/simple/books/models/author.py b/examples/simple/books/models/author.py index bf7a298..6f49a1d 100644 --- a/examples/simple/books/models/author.py +++ b/examples/simple/books/models/author.py @@ -6,15 +6,12 @@ from rest_framework_tricks.models.fields import NestedProxyField -from six import python_2_unicode_compatible - __all__ = ( 'Author', 'AuthorProxy', ) -@python_2_unicode_compatible class Author(models.Model): """Author.""" @@ -73,7 +70,7 @@ class Author(models.Model): }, ) - class Meta(object): + class Meta: """Meta options.""" ordering = ["id"] @@ -106,7 +103,7 @@ class AuthorProxy(Author): 'business_contact_information', ) - class Meta(object): + class Meta: """Meta options.""" proxy = True diff --git a/examples/simple/books/models/book.py b/examples/simple/books/models/book.py index 35d33e1..a96597a 100644 --- a/examples/simple/books/models/book.py +++ b/examples/simple/books/models/book.py @@ -3,11 +3,8 @@ """ from django.db import models - from rest_framework_tricks.models.fields import NestedProxyField -from six import python_2_unicode_compatible - from ..constants import ( BOOK_PUBLISHING_STATUS_CHOICES, BOOK_PUBLISHING_STATUS_DEFAULT, @@ -20,7 +17,6 @@ ) -@python_2_unicode_compatible class Book(models.Model): """Book.""" @@ -59,7 +55,7 @@ class Book(models.Model): 'state', ) - class Meta(object): + class Meta: """Meta options.""" ordering = ["isbn"] @@ -71,7 +67,7 @@ def __str__(self): class BookProxy(Book): """Book proxy model for to be used in testing.""" - class Meta(object): + class Meta: """Meta options.""" proxy = True @@ -80,9 +76,7 @@ class Meta(object): class BookProxy2(Book): """Book proxy model for to be used in testing.""" - class Meta(object): + class Meta: """Meta options.""" proxy = True - - diff --git a/examples/simple/books/models/order.py b/examples/simple/books/models/order.py index bd81d02..7741683 100644 --- a/examples/simple/books/models/order.py +++ b/examples/simple/books/models/order.py @@ -4,16 +4,13 @@ from django.conf import settings from django.db import models -from django.utils.translation import ugettext - -from six import python_2_unicode_compatible +from django.utils.translation import gettext __all__ = ( 'Order', ) -@python_2_unicode_compatible class Order(models.Model): """Order.""" @@ -23,10 +20,10 @@ class Order(models.Model): created = models.DateField(auto_now_add=True) updated = models.DateField(auto_now=True) - class Meta(object): + class Meta: """Meta options.""" ordering = ["-created"] def __str__(self): - return ugettext('Order') + return gettext('Order') diff --git a/examples/simple/books/models/order_line.py b/examples/simple/books/models/order_line.py index c4b7e44..249cd0c 100644 --- a/examples/simple/books/models/order_line.py +++ b/examples/simple/books/models/order_line.py @@ -3,16 +3,12 @@ """ from django.db import models -from django.utils.translation import ugettext - -from six import python_2_unicode_compatible __all__ = ( 'OrderLine', ) -@python_2_unicode_compatible class OrderLine(models.Model): """Order line.""" @@ -22,10 +18,10 @@ class OrderLine(models.Model): on_delete=models.CASCADE ) - class Meta(object): + class Meta: """Meta options.""" ordering = ["order__created"] def __str__(self): - return ugettext('{}').format(self.book.isbn) + return self.book.isbn diff --git a/examples/simple/books/models/payment.py b/examples/simple/books/models/payment.py new file mode 100644 index 0000000..35ba46e --- /dev/null +++ b/examples/simple/books/models/payment.py @@ -0,0 +1,89 @@ +""" +Author model. +""" + +from django.db import models + +from rest_framework_tricks.models.fields import NestedProxyField + +__all__ = ( + 'Payment', + "PaymentProxy", +) + + +class Payment(models.Model): + """Payment.""" + + buyer_salutation = models.CharField(max_length=10) + buyer_name = models.CharField(max_length=200) + buyer_email = models.EmailField() + buyer_headshot = models.ImageField(upload_to='authors', null=True, blank=True) + buyer_birth_date = models.DateField(null=True, blank=True) + buyer_biography = models.TextField(null=True, blank=True) + buyer_phone_number = models.CharField(max_length=200, null=True, blank=True) + buyer_website = models.URLField(null=True, blank=True) + + company_name = models.CharField(max_length=200, null=True, blank=True) + company_phone_number = models.CharField(max_length=200, + null=True, + blank=True) + company_email = models.EmailField(null=True, blank=True) + company_website = models.URLField(null=True, blank=True) + + # This does not cause a model change + contact_information = NestedProxyField( + { + 'buyer': ( + ('email', "buyer_email"), + ('phone_number', "buyer_phone_number"), + ('website', "buyer_website"), + ) + }, + { + 'company': ( + ("name", "company_name"), + ("email", 'company_email',), + ("phone_number", 'company_phone_number',), + ("website", 'company_website',), + ) + }, + ) + + class Meta: + """Meta options.""" + + ordering = ["id"] + + def __str__(self): + return self.name + + +class PaymentProxy(Payment): + """Payment proxy model for to be used in testing.""" + + # This does not cause a model change + buyer = NestedProxyField( + 'email', + 'phone_number', + 'website', + ) + + # This does not cause a model change + company = NestedProxyField( + ("name", "company_name"), + ("email", 'company_email',), + ("phone_number", 'company_phone_number',), + ("website", 'company_website',), + ) + + # This does not cause a model change + contact_information = NestedProxyField( + 'buyer', + 'company', + ) + + class Meta: + """Meta options.""" + + proxy = True diff --git a/examples/simple/books/models/profile.py b/examples/simple/books/models/profile.py index 2b7f555..91b30e5 100644 --- a/examples/simple/books/models/profile.py +++ b/examples/simple/books/models/profile.py @@ -3,17 +3,13 @@ """ from django.db import models - from rest_framework_tricks.models.fields import NestedProxyField -from six import python_2_unicode_compatible - __all__ = ( 'Profile', ) -@python_2_unicode_compatible class Profile(models.Model): """Profile.""" @@ -120,10 +116,10 @@ class Profile(models.Model): # } # } - class Meta(object): + class Meta: """Meta options.""" ordering = ["id"] def __str__(self): - return self.name + return self.email diff --git a/examples/simple/books/models/publisher.py b/examples/simple/books/models/publisher.py index f66f44f..f2b60fb 100644 --- a/examples/simple/books/models/publisher.py +++ b/examples/simple/books/models/publisher.py @@ -3,17 +3,13 @@ """ from django.db import models - from rest_framework_tricks.models.fields import NestedProxyField -from six import python_2_unicode_compatible - __all__ = ( 'Publisher', ) -@python_2_unicode_compatible class Publisher(models.Model): """Publisher.""" @@ -34,7 +30,7 @@ class Publisher(models.Model): as_object=True ) - class Meta(object): + class Meta: """Meta options.""" ordering = ["id"] diff --git a/examples/simple/books/models/tag.py b/examples/simple/books/models/tag.py index cfcdbf0..4025f8d 100644 --- a/examples/simple/books/models/tag.py +++ b/examples/simple/books/models/tag.py @@ -3,7 +3,7 @@ """ from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ __all__ = ( 'Tag', @@ -15,7 +15,7 @@ class Tag(models.Model): title = models.CharField(max_length=255, unique=True) - class Meta(object): + class Meta: """Meta options.""" verbose_name = _("Tag") diff --git a/examples/simple/books/rest_framework_extensions_routers_compat.py b/examples/simple/books/rest_framework_extensions_routers_compat.py index b31eca8..cd29e03 100644 --- a/examples/simple/books/rest_framework_extensions_routers_compat.py +++ b/examples/simple/books/rest_framework_extensions_routers_compat.py @@ -1,13 +1,10 @@ -# -*- coding: utf-8 -*- """ Temporary copy of the ``rest_framework_extensions.routers`` of the ``drf_extensions`` package. To be removed once the latter one is updated to work with Django 2.0. """ -from distutils.version import LooseVersion from django.core.exceptions import ImproperlyConfigured - -from nine.versions import DJANGO_GTE_1_10 +from django.urls import NoReverseMatch from rest_framework.routers import ( DefaultRouter, @@ -25,11 +22,6 @@ ) from rest_framework_extensions.compat_drf import add_trailing_slash_if_needed -if DJANGO_GTE_1_10: - from django.urls import NoReverseMatch -else: - from django.core.urlresolvers import NoReverseMatch - class ExtendedActionLinkRouterMixin(object): routes = [ diff --git a/examples/simple/books/serializers/payment.py b/examples/simple/books/serializers/payment.py new file mode 100644 index 0000000..ac0a05a --- /dev/null +++ b/examples/simple/books/serializers/payment.py @@ -0,0 +1,165 @@ +""" +Profile serializers. +""" + +from rest_framework import serializers +from rest_framework_tricks.serializers import ( + HyperlinkedModelSerializer, + ModelSerializer, +) + +from ..models import Payment + +__all__ = ( + 'PaymentSerializer', +) + +# **************************************************************************** +# ******************************* Profile ************************************ +# **************************************************************************** + + +class BuyerSerializer(serializers.ModelSerializer): + """Buyer serializer.""" + + class Meta: + """Meta options.""" + + model = Payment + fields = ( + 'buyer_salutation', + 'buyer_name', + 'buyer_email', + 'buyer_headshot', + 'buyer_birth_date', + "buyer_biography", + "buyer_phone_number", + "buyer_website", + ) + nested_proxy_field = True + + +class CompanySerializer(serializers.ModelSerializer): + """Company serializer.""" + + class Meta: + """Meta options.""" + + model = Payment + fields = ( + 'company_name', + 'company_phone_number', + 'company_email', + "company_website", + ) + nested_proxy_field = True + +# +# class BusinessContactInformationSerializer(serializers.ModelSerializer): +# """Business contact information serializer.""" +# +# class Meta: +# """Meta options.""" +# +# model = Payment +# fields = ( +# 'company_name', +# 'company_email', +# 'company_phone_number', +# 'company_website', +# ) +# nested_proxy_field = True +# +# +# class ContactInformationSerializer(serializers.ModelSerializer): +# """Contact information serializer.""" +# +# personal_contact_information = PersonalContactInformationSerializer( +# required=False +# ) +# business_contact_information = BusinessContactInformationSerializer( +# required=False +# ) +# +# class Meta(object): +# """Meta options.""" +# +# model = Profile +# fields = ( +# 'personal_contact_information', +# 'business_contact_information', +# ) +# nested_proxy_field = True +# +# +# class BankInformationSerializer(serializers.ModelSerializer): +# """Bank information serializer.""" +# +# class Meta(object): +# """Meta options.""" +# +# model = Profile +# fields = ( +# 'bank_name', +# 'bank_account_name', +# 'bank_account_number', +# ) +# nested_proxy_field = True +# +# +# class DataSerializer(serializers.ModelSerializer): +# """Data serializer.""" +# +# personal_information = PersonalInformationSerializer( +# required=False +# ) +# contact_information = ContactInformationSerializer( +# required=False +# ) +# bank_information = BankInformationSerializer( +# required=False +# ) +# +# class Meta(object): +# """Meta options.""" +# +# model = Profile +# fields = ( +# 'personal_information', +# 'contact_information', +# 'bank_information', +# ) +# nested_proxy_field = True +# +# +# class InformationSerializer(serializers.ModelSerializer): +# """information serializer.""" +# +# data = DataSerializer( +# required=False +# ) +# +# class Meta(object): +# """Meta options.""" +# +# model = Profile +# fields = ( +# 'data', +# ) +# nested_proxy_field = True + + +class PaymentSerializer(ModelSerializer): + """Payment serializer.""" + + buyer = BuyerSerializer(required=False) + company = CompanySerializer(required=False) + + class Meta(object): + """Meta options.""" + + model = Payment + fields = ( + 'id', + 'information', + ) diff --git a/examples/simple/books/urls.py b/examples/simple/books/urls.py index 6189095..48fdfb8 100644 --- a/examples/simple/books/urls.py +++ b/examples/simple/books/urls.py @@ -2,8 +2,7 @@ Urls. """ -from django.conf.urls import url, include - +from django.urls import re_path as url, include import rest_framework from rest_framework.routers import DefaultRouter diff --git a/src/rest_framework_tricks/__init__.py b/src/rest_framework_tricks/__init__.py index 3fcc3ca..492cb20 100644 --- a/src/rest_framework_tricks/__init__.py +++ b/src/rest_framework_tricks/__init__.py @@ -3,10 +3,7 @@ """ __title__ = 'django-rest-framework-tricks' -__version__ = '0.2.11' +__version__ = '0.2.12' __author__ = 'Artur Barseghyan ' -__copyright__ = '2017-2019 Artur Barseghyan' +__copyright__ = '2017-2021 Artur Barseghyan' __license__ = 'GPL-2.0-only OR LGPL-2.1-or-later' -__all__ = ('default_app_config',) - -default_app_config = 'rest_framework_tricks.apps.Config' diff --git a/src/rest_framework_tricks/apps.py b/src/rest_framework_tricks/apps.py index 86d4132..43db95c 100644 --- a/src/rest_framework_tricks/apps.py +++ b/src/rest_framework_tricks/apps.py @@ -4,9 +4,8 @@ from django.apps import AppConfig -__title__ = 'rest_framework_tricks.apps' __author__ = 'Artur Barseghyan ' -__copyright__ = '2017-2019 Artur Barseghyan' +__copyright__ = '2017-2021 Artur Barseghyan' __license__ = 'GPL-2.0-only OR LGPL-2.1-or-later' __all__ = ('Config',) diff --git a/src/rest_framework_tricks/filters/__init__.py b/src/rest_framework_tricks/filters/__init__.py index f2a938e..2e1e929 100644 --- a/src/rest_framework_tricks/filters/__init__.py +++ b/src/rest_framework_tricks/filters/__init__.py @@ -4,9 +4,8 @@ from .ordering import * -__title__ = 'rest_framework_tricks.filters' __author__ = 'Artur Barseghyan ' -__copyright__ = '2017-2019 Artur Barseghyan' +__copyright__ = '2017-2021 Artur Barseghyan' __license__ = 'GPL-2.0-only OR LGPL-2.1-or-later' __all__ = ( 'OrderingFilter', diff --git a/src/rest_framework_tricks/filters/ordering.py b/src/rest_framework_tricks/filters/ordering.py index 7e72fea..c6b926c 100644 --- a/src/rest_framework_tricks/filters/ordering.py +++ b/src/rest_framework_tricks/filters/ordering.py @@ -4,9 +4,8 @@ from rest_framework.filters import OrderingFilter as DjangoOrderingFilter -__title__ = 'rest_framework_tricks.filters.ordering' __author__ = 'Artur Barseghyan ' -__copyright__ = '2017-2019 Artur Barseghyan' +__copyright__ = '2017-2021 Artur Barseghyan' __license__ = 'GPL-2.0-only OR LGPL-2.1-or-later' __all__ = ('OrderingFilter',) diff --git a/src/rest_framework_tricks/models/fields/__init__.py b/src/rest_framework_tricks/models/fields/__init__.py index a50199c..b619461 100644 --- a/src/rest_framework_tricks/models/fields/__init__.py +++ b/src/rest_framework_tricks/models/fields/__init__.py @@ -4,9 +4,8 @@ from .nested_proxy import * -__title__ = 'rest_framework_tricks.models.fields' __author__ = 'Artur Barseghyan ' -__copyright__ = '2017-2019 Artur Barseghyan' +__copyright__ = '2017-2021 Artur Barseghyan' __license__ = 'GPL-2.0-only OR LGPL-2.1-or-later' __all__ = ( 'NestedProxyField', diff --git a/src/rest_framework_tricks/models/fields/nested_proxy.py b/src/rest_framework_tricks/models/fields/nested_proxy.py index 459f0d7..10a52b0 100644 --- a/src/rest_framework_tricks/models/fields/nested_proxy.py +++ b/src/rest_framework_tricks/models/fields/nested_proxy.py @@ -4,9 +4,8 @@ from ...utils import DictProxy -__title__ = 'rest_framework_tricks.models.fields.nested_proxy' __author__ = 'Artur Barseghyan ' -__copyright__ = '2017-2019 Artur Barseghyan' +__copyright__ = '2017-2021 Artur Barseghyan' __license__ = 'GPL-2.0-only OR LGPL-2.1-or-later' __all__ = ( 'NestedProxyField', @@ -144,6 +143,11 @@ def proxy_field(self): NestedProxyField(*__values, obj=obj) ) __dict.update({__key: getattr(obj, __key)}) + # If tuple + elif isinstance(__field, tuple): + __field_name, __field_source = __field + if hasattr(self, __field_source): + __dict.update({__field_name: getattr(obj, __field_source)}) # If string else: if hasattr(self, __field): diff --git a/src/rest_framework_tricks/serializers/__init__.py b/src/rest_framework_tricks/serializers/__init__.py index 503fbdd..4c85f80 100644 --- a/src/rest_framework_tricks/serializers/__init__.py +++ b/src/rest_framework_tricks/serializers/__init__.py @@ -4,9 +4,8 @@ from .nested_proxy import * -__title__ = 'rest_framework_tricks.serializers' __author__ = 'Artur Barseghyan ' -__copyright__ = '2017-2019 Artur Barseghyan' +__copyright__ = '2017-2021 Artur Barseghyan' __license__ = 'GPL-2.0-only OR LGPL-2.1-or-later' __all__ = ( 'extract_nested_serializers', diff --git a/src/rest_framework_tricks/serializers/nested_proxy.py b/src/rest_framework_tricks/serializers/nested_proxy.py index 5303569..6680806 100644 --- a/src/rest_framework_tricks/serializers/nested_proxy.py +++ b/src/rest_framework_tricks/serializers/nested_proxy.py @@ -15,8 +15,7 @@ >>> isbn = serializers.CharField(required=False) >>> pages = serializers.IntegerField(required=False) >>> - >>> class Meta(object): - >>> + >>> class Meta: >>> model = Book >>> fields = ( >>> 'publication_date', @@ -28,8 +27,7 @@ >>> >>> class StockInformationSerializer(serializers.ModelSerializer): >>> - >>> class Meta(object): - >>> + >>> class Meta: >>> model = Book >>> fields = ( >>> 'stock_count', @@ -42,9 +40,8 @@ from rest_framework import serializers -__title__ = 'rest_framework_tricks.serializers.nested_proxy' __author__ = 'Artur Barseghyan ' -__copyright__ = '2017-2019 Artur Barseghyan' +__copyright__ = '2017-2021 Artur Barseghyan' __license__ = 'GPL-2.0-only OR LGPL-2.1-or-later' __all__ = ( 'extract_nested_serializers', @@ -127,7 +124,7 @@ def set_instance_values(nested_serializers, for __serializer_name, __serializer in nested_serializers_data.items(): for __field_name, __field_value in __serializer.items(): if is_nested_proxy_field( - nested_serializers[__serializer_name][__field_name] + nested_serializers[__serializer_name][__field_name] ): set_instance_values( { @@ -160,8 +157,7 @@ class ModelSerializer(serializers.ModelSerializer): >>> ) >>> stock_information = StockInformationSerializer(required=False) >>> - >>> class Meta(object): - >>> + >>> class Meta: >>> model = Book >>> fields = ( >>> 'url', @@ -250,8 +246,7 @@ class HyperlinkedModelSerializer(serializers.HyperlinkedModelSerializer): >>> ) >>> stock_information = StockInformationSerializer(required=False) >>> - >>> class Meta(object): - >>> + >>> class Meta: >>> model = Book >>> fields = ( >>> 'url', diff --git a/src/rest_framework_tricks/tests/__init__.py b/src/rest_framework_tricks/tests/__init__.py index 3ee6a81..e69de29 100644 --- a/src/rest_framework_tricks/tests/__init__.py +++ b/src/rest_framework_tricks/tests/__init__.py @@ -1,12 +0,0 @@ -""" -Tests. -""" -import unittest - -from .test_nested_proxy_field import * -from .test_ordering_filter import * -from .test_utils import * - - -if __name__ == '__main__': - unittest.main() diff --git a/src/rest_framework_tricks/tests/base.py b/src/rest_framework_tricks/tests/base.py index 55ed0c9..bde839e 100644 --- a/src/rest_framework_tricks/tests/base.py +++ b/src/rest_framework_tricks/tests/base.py @@ -5,16 +5,14 @@ import logging from django.test import TestCase -from rest_framework.test import APITestCase from faker import Faker - import pytest +from rest_framework.test import APITestCase import factories -__title__ = 'rest_framework_tricks.tests.base' __author__ = 'Artur Barseghyan ' -__copyright__ = '2017-2019 Artur Barseghyan' +__copyright__ = '2017-2021 Artur Barseghyan' __license__ = 'GPL-2.0-only OR LGPL-2.1-or-later' __all__ = ( 'BaseRestFrameworkTestCase', diff --git a/src/rest_framework_tricks/tests/test_nested_proxy_field.py b/src/rest_framework_tricks/tests/test_nested_proxy_field.py index 8cb0df3..ebc18ee 100644 --- a/src/rest_framework_tricks/tests/test_nested_proxy_field.py +++ b/src/rest_framework_tricks/tests/test_nested_proxy_field.py @@ -1,29 +1,16 @@ """ Test NestedProxyField. """ - -from __future__ import absolute_import - from decimal import Decimal -import unittest - -from nine.versions import DJANGO_GTE_1_10 - +from django.urls import reverse import pytest - from rest_framework import status import factories from .base import BaseRestFrameworkTestCase -if DJANGO_GTE_1_10: - from django.urls import reverse -else: - from django.core.urlresolvers import reverse - -__title__ = 'rest_framework_tricks.tests.test_nested_proxy_field' __author__ = 'Artur Barseghyan ' __copyright__ = '2017-2019 Artur Barseghyan' __license__ = 'GPL-2.0-only OR LGPL-2.1-or-later' @@ -657,7 +644,3 @@ def test_nested_proxy_field_model_serializer_depth_more_missing_fields( self._nested_proxy_field_model_serializer_depth_more_missing_fields( self.profile_detail_url ) - - -if __name__ == '__main__': - unittest.main() diff --git a/src/rest_framework_tricks/tests/test_ordering_filter.py b/src/rest_framework_tricks/tests/test_ordering_filter.py index 8e84e06..e346b00 100644 --- a/src/rest_framework_tricks/tests/test_ordering_filter.py +++ b/src/rest_framework_tricks/tests/test_ordering_filter.py @@ -1,27 +1,14 @@ """ Test OrderingFilter. """ - -from __future__ import absolute_import - -import unittest - -from nine.versions import DJANGO_GTE_1_10 - +from django.urls import reverse import pytest - from rest_framework import status import factories from .base import BaseRestFrameworkTestCase -if DJANGO_GTE_1_10: - from django.urls import reverse -else: - from django.core.urlresolvers import reverse - -__title__ = 'rest_framework_tricks.tests.test_nested_proxy_field' __author__ = 'Artur Barseghyan ' __copyright__ = '2017-2019 Artur Barseghyan' __license__ = 'GPL-2.0-only OR LGPL-2.1-or-later' @@ -180,7 +167,3 @@ def test_ordering_list_descending(self): :return: """ return self._test_ordering_list(descending=True) - - -if __name__ == '__main__': - unittest.main() diff --git a/src/rest_framework_tricks/tests/test_utils.py b/src/rest_framework_tricks/tests/test_utils.py index 15f1676..122ca38 100644 --- a/src/rest_framework_tricks/tests/test_utils.py +++ b/src/rest_framework_tricks/tests/test_utils.py @@ -1,12 +1,6 @@ -# -*- coding: utf-8 -*- """ Test utils. """ - -from __future__ import absolute_import, unicode_literals, print_function - -import unittest - import pytest from ..utils import DictProxy @@ -42,7 +36,3 @@ def test_dict_proxy(self): self.assertEqual(getattr(__dict_proxy, __key), __dict[__key]) print(__dict_proxy) - - -if __name__ == '__main__': - unittest.main() diff --git a/src/rest_framework_tricks/utils.py b/src/rest_framework_tricks/utils.py index bc1d88d..d52b54d 100644 --- a/src/rest_framework_tricks/utils.py +++ b/src/rest_framework_tricks/utils.py @@ -3,18 +3,15 @@ """ import json -from six import python_2_unicode_compatible -__title__ = 'rest_framework_tricks.utils' __author__ = 'Artur Barseghyan ' -__copyright__ = '2017-2019 Artur Barseghyan' +__copyright__ = '2017-2021 Artur Barseghyan' __license__ = 'GPL-2.0-only OR LGPL-2.1-or-later' __all__ = ( 'DictProxy', ) -@python_2_unicode_compatible class DictProxy(object): """Dictionary proxy.