{ "info": { "author": "Petar Mijovic", "author_email": "petar@psoftware.co", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Assignables #\nHelper package for Flask and Flask-API\n\n## Third Party Library Requirements ##\n* inflection\n\n## Introduction ##\n\nThis package is helper package for assigning values to SqlAlchemy db model objects and to get their dict representation so they can be sent as response from Flask-API endpoints.\nThis package can be used without using SqlAlchemy, Flask and Flask-API.\n\n## Installation ##\n pip install assignables\n\n## Usage ##\n from assignables import Assignable\n\n class SomeModel(db.Model, Assignable):\n id = db.Column(db.Integer, primary_key=True)\n username = db.Column(db.String(80), unique=True, nullable=False)\n email = db.Column(db.String(120), unique=True, nullable=False)\n\n def __init__(self, username=None, email=None):\n Assignable.__init__()\n self.username = username\n self.email = email\n\n data = {\n \"username\": 'user123',\n \"email\": 'user@email.com'\n }\n\n obj = SomeModel()\n obj.assign(data) # username and email will be assigned.\n\n obj_dict = obj.get_json_dict() # obj_dict won't contain _sa_instance_state and Assignable class atributes.\n\nAssignable will give your model two new methods:\n1. `assign(data_dict)` - this method will assign coresponding atributes from respective key value pairs from `data_dict`.\n2. `get_json_dict()` - this method will return objects dictionary.\n\nUsing `assign` method by default will not assign objects `id`, but will other atributes if they exist in `data_dict`.\nMethod `get_json_dict` will not have `_sa_instance_state` key inside by default and atriubets Assignable class contains.\n\nIf you want to specify custom atributes for not assigning or not serializing you can do that:\n from assignables import Assignables\n\n class SomeModel(db.Model, Assignable):\n id = db.Column(db.Integer, primary_key=True)\n username = db.Column(db.String(80), unique=True, nullable=False)\n email = db.Column(db.String(120), unique=True, nullable=False)\n\n def __init__(self, username=None, email=None):\n unassignables = ['id', 'email']\n unserializables = ['_sa_instance_state', 'email']\n Assignable.__init__(unassignables=unassignables, unserializables=unserializables)\n self.username = username\n self.email = email\n\n data = {\n \"username\": 'user123',\n \"email\": 'user@email.com'\n }\n\n obj = SomeModel()\n obj.assign(data) # username will only be assigned.\n\n obj_dict = obj.get_json_dict() # obj_dict will not contain _sa_instance_state and email atributes.\n\nIf used like this, `assign` method will not assign `id` and `email` atributes.\nDictinary returned by calling `get_json_dict` will not have keys `_sa_instance_state` and `email`.\n\nYou can also add you custom data validator - Validation will be executed inside `assign` method.\nIf validation failed `ValidationError` exception is raised.\n\n from assignables import DataValidator, Assignables\n\n\n class CustomValidator(DataValidator):\n def validate(self, obj):\n # return True if validated, false otherwise.\n\n\n class SomeModel(db.Model, Assignable):\n id = db.Column(db.Integer, primary_key=True)\n username = db.Column(db.String(80), unique=True, nullable=False)\n email = db.Column(db.String(120), unique=True, nullable=False)\n\n def __init__(self, username=None, email=None):\n Assignable.__init__(validator=CustomValidator())\n self.username = username\n self.email = email\n\n data = {\n \"username\": 'user123',\n \"email\": 'user@email.com'\n }\n\n obj = SomeModel()\n obj.assign(data) # Data will be validate using you custom data validator.\n\nIf there is a missmatch between your atribute naming or you wish to specify a naming convetion for\nresulting dictionary there is a way.\n\n data = {\n \"Username\": 'user123',\n \"Email\": 'user@email.com'\n }\n\n obj = SomeModel()\n obj.assign(data, under_score_data=True) # This will handle create snake case keys from data dictionary keys.\n obj_dict = obj.get_json_dict(naming_convetion='camel_case') # Output dict would have camel case keys.\n\nOptions for `naming_convention` are:\n1. camel_case\n2. upper_camel_case\n3. snake_case\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mijovicpetar/assignables", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "assignables", "package_url": "https://pypi.org/project/assignables/", "platform": "", "project_url": "https://pypi.org/project/assignables/", "project_urls": { "Homepage": "https://github.com/mijovicpetar/assignables" }, "release_url": "https://pypi.org/project/assignables/1.0.0/", "requires_dist": null, "requires_python": "", "summary": "Helper package for assigning values to DB model objects.", "version": "1.0.0" }, "last_serial": 4824292, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "97dade2ca41f68a84518f1a032841dcc", "sha256": "abdf972d17597433bca572f468ee309d6b6af3f82ed8112e0fdb0965f4c57269" }, "downloads": -1, "filename": "assignables-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "97dade2ca41f68a84518f1a032841dcc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5202, "upload_time": "2019-02-15T10:55:06", "url": "https://files.pythonhosted.org/packages/da/52/211a6cc1d4d263758d4a7a9c4803516c969ff1179201c89aace7cb9ba80e/assignables-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e28a6525b5e943f645c924797191f29d", "sha256": "b16036ff7d8f7cd1b9ddcf6774d545fd9cffb8a04d19a6f21fcdeb34bd7ca37d" }, "downloads": -1, "filename": "assignables-0.0.1.tar.gz", "has_sig": false, "md5_digest": "e28a6525b5e943f645c924797191f29d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3531, "upload_time": "2019-02-15T10:55:08", "url": "https://files.pythonhosted.org/packages/f9/01/3c99764dedc840a15b87d269289702d86ad7b612e4f422871f714225a67c/assignables-0.0.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "9509e42311bc3ccf49d65609afb3820d", "sha256": "9d97259e933e1ec924cc910674496d5d0f09cbc2c1e061dbd064e9eabe1fe326" }, "downloads": -1, "filename": "assignables-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9509e42311bc3ccf49d65609afb3820d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5685, "upload_time": "2019-02-15T11:45:52", "url": "https://files.pythonhosted.org/packages/6c/75/35c15c653f03543dabeba1de3117d1eb222efe972163540668b926b8292a/assignables-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "75bce4af27670662c1466ebe5f6a26ff", "sha256": "984dc296778c33c8da398abf3b6579e88d971c723bff65d85e5a6c30a6cde4b4" }, "downloads": -1, "filename": "assignables-1.0.0.tar.gz", "has_sig": false, "md5_digest": "75bce4af27670662c1466ebe5f6a26ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4141, "upload_time": "2019-02-15T11:45:53", "url": "https://files.pythonhosted.org/packages/0d/fc/a8d33aef5522299ff9be7c480e8e9ba8e2ae73c95bca2f957dd03dd90bc0/assignables-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9509e42311bc3ccf49d65609afb3820d", "sha256": "9d97259e933e1ec924cc910674496d5d0f09cbc2c1e061dbd064e9eabe1fe326" }, "downloads": -1, "filename": "assignables-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9509e42311bc3ccf49d65609afb3820d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5685, "upload_time": "2019-02-15T11:45:52", "url": "https://files.pythonhosted.org/packages/6c/75/35c15c653f03543dabeba1de3117d1eb222efe972163540668b926b8292a/assignables-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "75bce4af27670662c1466ebe5f6a26ff", "sha256": "984dc296778c33c8da398abf3b6579e88d971c723bff65d85e5a6c30a6cde4b4" }, "downloads": -1, "filename": "assignables-1.0.0.tar.gz", "has_sig": false, "md5_digest": "75bce4af27670662c1466ebe5f6a26ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4141, "upload_time": "2019-02-15T11:45:53", "url": "https://files.pythonhosted.org/packages/0d/fc/a8d33aef5522299ff9be7c480e8e9ba8e2ae73c95bca2f957dd03dd90bc0/assignables-1.0.0.tar.gz" } ] }