nescs


Namenescs JSON
Version 0.3.5 PyPI version JSON
download
home_pagehttps://github.com/twoics/nesc
SummaryБиблиотека создания моделей вложенных сериализаторов
upload_time2023-07-09 07:48:42
maintainer
docs_urlNone
authorcifra-k
requires_python>=3.8
licenseMIT
keywords
VCS
bugtrack_url
requirements Django djangorestframework setuptools twine
Travis-CI No Travis.
coveralls test coverage No coveralls.
            =====
NESCS
=====
    ``NESTED SERIALIZER CREATE SERVICE``

Installation
------------
Установка через PyPi::

    pip install nescs

Description
-----------
Данная библиотека позволяет автоматически создавать объекты во
вложенных сериализаторах.
Работу по созданию вложенных объектов берет на себя сервис -
``SerializerCreateService``.
Он поддерживает создание объектов в случаях

1. Many to many
2. One to one
3. Foreign key


Examples
--------
Ниже расположено несколько примеров использования библиотеки на
различных вариантах связи между моделями

Many to many case
~~~~~~~~~~~~~~~~~
Для создание объектов с отношением **m2m** используется метод ``create_m2m_instances``

Пример кода для случая **m2m**::

    class PublicationSerializer(serializers.ModelSerializer):
        class Meta:
            model = Publication
            fields = (
                'id',
                'title',
            )


    class ArticleSerializer(serializers.ModelSerializer):
        publications = PublicationSerializer(
            many=True
        )

        class Meta:
            model = Article
            fields = (
                'id',
                'headline',
                'publications',
            )

        def create(self, validated_data):
            service = SerializerCreateService(self, validated_data, m2m_fields=['publications'])
            current_instance = super().create(validated_data)

            service.create_m2m_instances(
                parent_instance=current_instance
            )
            return current_instance

One to one case
~~~~~~~~~~~~~~~~~
Для создание объектов с отношением **o2o** используется метод ``create_child_instances``

Пример кода для случая **o2o**::

    class RestaurantDirectorSerializer(serializers.ModelSerializer):
        class Meta:
            model = RestaurantDirector
            fields = (
                'id',
                'name',
            )

    class RestaurantSerializer(serializers.ModelSerializer):
        director = RestaurantDirectorSerializer(
            required=True
        )

        class Meta:
            model = Restaurant
            fields = (
                'id',
                'serves_hot_dogs',
                'serves_pizza',
                'director',
            )

        def create(self, validated_data):
            service = SerializerCreateService(
                self,
                validated_data,
                child_fields=['director']
            )
            restaurant = super().create(validated_data)

            service.create_child_instances(restaurant)
            return restaurant

Foreign key case
~~~~~~~~~~~~~~~~~
Для создание объектов с отношением **fk** используется метод ``create_fk_instances``

Пример кода для случая **fk**::

    class ReporterSerializer(serializers.ModelSerializer):
        class Meta:
            model = Reporter
            fields = (
                'id',
                'first_name',
                'last_name',
            )

    class NewsSerializer(serializers.ModelSerializer):
        reporter = ReporterSerializer(
            required=True
        )

        class Meta:
            model = News
            fields = (
                'id',
                'headline',
                'reporter'
            )

        def create(self, validated_data):
            service = SerializerCreateService(self, validated_data, fk_fields=['reporter'])
            service.create_fk_instances()
            return super().create(validated_data)


Feature
-------
    Полезные фичи

- При **инициализации** сервиса, он автоматически удаляет из ``validated_data`` поля указанные в ``m2m_fields`` и ``child_fields`` Поэтому вам ненужно вручную очищать ``validated_data`` от вложенных объектов для создания родительского объекта. Просто вызовите создание родительского объекта после инициализации сервиса. (Полезно для **o2o** и **m2m**)

- После вызова одного из методов создания вложенных объектов, в ``validated_data`` будут помещены экземпляры созданных объектов

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/twoics/nesc",
    "name": "nescs",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "",
    "author": "cifra-k",
    "author_email": "",
    "download_url": "https://files.pythonhosted.org/packages/22/61/b770243f5cabe50b6d12ea069973c53f2f321fa5d32e0140cf41692f8a1d/nescs-0.3.5.tar.gz",
    "platform": null,
    "description": "=====\nNESCS\n=====\n    ``NESTED SERIALIZER CREATE SERVICE``\n\nInstallation\n------------\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 PyPi::\n\n    pip install nescs\n\nDescription\n-----------\n\u0414\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432\u043e\n\u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u0445.\n\u0420\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0431\u0435\u0440\u0435\u0442 \u043d\u0430 \u0441\u0435\u0431\u044f \u0441\u0435\u0440\u0432\u0438\u0441 -\n``SerializerCreateService``.\n\u041e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445\n\n1. Many to many\n2. One to one\n3. Foreign key\n\n\nExamples\n--------\n\u041d\u0438\u0436\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\n\u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438\n\nMany to many case\n~~~~~~~~~~~~~~~~~\n\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c **m2m** \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 ``create_m2m_instances``\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f **m2m**::\n\n    class PublicationSerializer(serializers.ModelSerializer):\n        class Meta:\n            model = Publication\n            fields = (\n                'id',\n                'title',\n            )\n\n\n    class ArticleSerializer(serializers.ModelSerializer):\n        publications = PublicationSerializer(\n            many=True\n        )\n\n        class Meta:\n            model = Article\n            fields = (\n                'id',\n                'headline',\n                'publications',\n            )\n\n        def create(self, validated_data):\n            service = SerializerCreateService(self, validated_data, m2m_fields=['publications'])\n            current_instance = super().create(validated_data)\n\n            service.create_m2m_instances(\n                parent_instance=current_instance\n            )\n            return current_instance\n\nOne to one case\n~~~~~~~~~~~~~~~~~\n\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c **o2o** \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 ``create_child_instances``\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f **o2o**::\n\n    class RestaurantDirectorSerializer(serializers.ModelSerializer):\n        class Meta:\n            model = RestaurantDirector\n            fields = (\n                'id',\n                'name',\n            )\n\n    class RestaurantSerializer(serializers.ModelSerializer):\n        director = RestaurantDirectorSerializer(\n            required=True\n        )\n\n        class Meta:\n            model = Restaurant\n            fields = (\n                'id',\n                'serves_hot_dogs',\n                'serves_pizza',\n                'director',\n            )\n\n        def create(self, validated_data):\n            service = SerializerCreateService(\n                self,\n                validated_data,\n                child_fields=['director']\n            )\n            restaurant = super().create(validated_data)\n\n            service.create_child_instances(restaurant)\n            return restaurant\n\nForeign key case\n~~~~~~~~~~~~~~~~~\n\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c **fk** \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 ``create_fk_instances``\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f **fk**::\n\n    class ReporterSerializer(serializers.ModelSerializer):\n        class Meta:\n            model = Reporter\n            fields = (\n                'id',\n                'first_name',\n                'last_name',\n            )\n\n    class NewsSerializer(serializers.ModelSerializer):\n        reporter = ReporterSerializer(\n            required=True\n        )\n\n        class Meta:\n            model = News\n            fields = (\n                'id',\n                'headline',\n                'reporter'\n            )\n\n        def create(self, validated_data):\n            service = SerializerCreateService(self, validated_data, fk_fields=['reporter'])\n            service.create_fk_instances()\n            return super().create(validated_data)\n\n\nFeature\n-------\n    \u041f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0444\u0438\u0447\u0438\n\n- \u041f\u0440\u0438 **\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438** \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0438\u0437 ``validated_data`` \u043f\u043e\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 ``m2m_fields`` \u0438 ``child_fields`` \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u043c \u043d\u0435\u043d\u0443\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0447\u0438\u0449\u0430\u0442\u044c ``validated_data`` \u043e\u0442 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0438\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430. (\u041f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f **o2o** \u0438 **m2m**)\n\n- \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0432 ``validated_data`` \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u044b \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432",
    "version": "0.3.5",
    "project_urls": {
        "Homepage": "https://github.com/twoics/nesc"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "953b4c84f27e730b872a8757682ddcd49512e98cb71745fb0aececa4b7538ac3",
                "md5": "97ae294e3070f6823431be49a15c348f",
                "sha256": "f9182bb3aba3290c6ed66c26fe4455ab0a3554472d72f3f1de8c37f87f82d948"
            },
            "downloads": -1,
            "filename": "nescs-0.3.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "97ae294e3070f6823431be49a15c348f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 4054,
            "upload_time": "2023-07-09T07:48:40",
            "upload_time_iso_8601": "2023-07-09T07:48:40.599098Z",
            "url": "https://files.pythonhosted.org/packages/95/3b/4c84f27e730b872a8757682ddcd49512e98cb71745fb0aececa4b7538ac3/nescs-0.3.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2261b770243f5cabe50b6d12ea069973c53f2f321fa5d32e0140cf41692f8a1d",
                "md5": "93280e479b16073ce9d0319d0c384bb1",
                "sha256": "bf1637eb50925b0d2bb69686cfc081cd29181281e7f1cff30c74deae7db27ccb"
            },
            "downloads": -1,
            "filename": "nescs-0.3.5.tar.gz",
            "has_sig": false,
            "md5_digest": "93280e479b16073ce9d0319d0c384bb1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 3960,
            "upload_time": "2023-07-09T07:48:42",
            "upload_time_iso_8601": "2023-07-09T07:48:42.037082Z",
            "url": "https://files.pythonhosted.org/packages/22/61/b770243f5cabe50b6d12ea069973c53f2f321fa5d32e0140cf41692f8a1d/nescs-0.3.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-07-09 07:48:42",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "twoics",
    "github_project": "nesc",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "Django",
            "specs": [
                [
                    "==",
                    "4.2.3"
                ]
            ]
        },
        {
            "name": "djangorestframework",
            "specs": [
                [
                    "==",
                    "3.14.0"
                ]
            ]
        },
        {
            "name": "setuptools",
            "specs": [
                [
                    "==",
                    "65.5.1"
                ]
            ]
        },
        {
            "name": "twine",
            "specs": [
                [
                    "==",
                    "4.0.2"
                ]
            ]
        }
    ],
    "lcname": "nescs"
}
        
Elapsed time: 0.15023s