{ "info": { "author": "Andrew Rowe", "author_email": "rowe.andrew.d@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "flask-serialize\n===============\n\n|PyPI Version|\n\nDB Model JSON serialization and PUT/POST write for Flask applications using SQLAlchemy\n=======================================================================================\n\nSimple and quick to get going in two steps.\n-------------------------------------------------\n\n1. Import and add the FlaskSerializeMixin mixin to a model:\n\n.. code:: python\n\n from flask_serialize import FlaskSerializeMixin\n\n class Item(db.Model, FlaskSerializeMixin):\n id = db.Column(db.Integer, primary_key=True)\n # other fields ...\n\n2. Configure the route with the do all mixin method:\n\n.. code:: python\n\n @app.route('/item/')\n @app.route('/items')\n def items(item_id=None):\n return Item.get_delete_put_post(item_id)\n\n3. Done! Returns a single item or a list of items in a single route.\n\nFlask-serialize is intended for joining a Flask SQLAlchemy Python backend with\na JavaScript Web client. It allows read JSON serialization\nfrom the db and easy to use write back of models using PUT and POST.\n\nIt is not intended to be a full two way serialization package. Use\n`marshmallow` for more complicated systems.\n\nExample:\n========\n\nModel setup:\n------------\n\n.. code:: python\n\n # example database model\n from flask_serialize import FlaskSerializeMixin\n\n # required to set class var db for writing to a database\n from app import db\n\n FlaskSerializeMixin.db = db\n\n class Setting(FlaskSerializeMixin, db.Model):\n id = db.Column(db.Integer, primary_key=True)\n\n setting_type = db.Column(db.String(120), index=True, default='misc')\n key = db.Column(db.String(120), index=True)\n value = db.Column(db.String(30000), default='')\n active = db.Column(db.String(1), default='y')\n created = db.Column(db.DateTime, default=datetime.utcnow)\n updated = db.Column(db.DateTime, default=datetime.utcnow)\n\n # serializer fields\n create_fields = update_fields = ['setting_type', 'value', 'key', 'active']\n\n # checks if Flask-Serialize can delete\n def can_delete(self):\n if self.value == '1234':\n raise Exception('Deletion not allowed. Magic value!')\n\n # checks if Flask-Serialize can create/update\n def verify(self, create=False):\n if not self.key or len(self.key) < 1:\n raise Exception('Missing key')\n\n if not self.setting_type or len(self.setting_type) < 1:\n raise Exception('Missing setting type')\n\n def __repr__(self):\n return '' % (self.id, self.setting_type, self.value)\n\nRoutes setup:\n---------------\n\nGet a single item as json.\n\n.. code:: python\n\n @app.route('/get_setting/', methods=['GET'])\n def get_setting( item_id ):\n return Setting.get_delete_put_post(item_id)\n\n Returns a Flask response with a json object, example:\n\n.. code:: JavaScript\n\n {id:1, value: \"hello\"}\n\nPut an update to a single item as json.\n\n.. code:: python\n\n @app.route('/update_setting/', methods=['PUT'])\n def update_setting( item_id ):\n return Setting.get_delete_put_post(item_id)\n\n Returns a Flask response with the result as a json object:\n\n.. code:: JavaScript\n\n {error:\"any error message\", message: \"success message\"}\n\n\nDelete a single item.\n\n.. code:: python\n\n @app.route('/delete_setting/', methods=['DELETE'])\n def delete_setting( item_id ):\n return Setting.get_delete_put_post(item_id)\n\n Returns a Flask response with the result as a json object:\n\n.. code:: JavaScript\n\n {error:\"any error message\", message: \"success message\"}\n\nGet all items as a json list.\n\n.. code:: python\n\n @app.route('/get_setting_all', methods=['GET'])\n def get_setting_all():\n return Setting.get_delete_put_post()\n\n Returns a Flask response with a list of json objects, example:\n\n.. code:: JavaScript\n\n [{id:1, value: \"hello\"},{id:2, value: \"there\"},{id:1, value: \"programmer\"}]\n\nAll of: get-all, get, put, post, and delete can be combined in one route.\n\n.. code:: python\n\n @app.route('/setting/', methods=['GET', 'PUT', 'DELETE', 'POST'])\n @app.route('/setting', methods=['GET', 'POST'])\n def route_setting_all(item_id=None):\n return Setting.get_delete_put_post(item_id)\n\nUpdating from a json object in the flask put request\n\nJQuery example:\n\n.. code:: javascript\n\n function put(setting_id) {\n return $.ajax({\n url: `/update_setting/${setting_id}`,\n method: 'PUT',\n contentType: \"application/json\",\n data: {setting_type:\"x\",value:\"100\"},\n }).then(response => {\n if( response.error ){\n alert(\"Error:\"+response.error);\n }\n else {\n alert(\"OK:\"+response.message);\n }\n });\n }\n\nFlask route: \n\n.. code:: python\n\n @app.route('/update_setting/', methods=['PUT'])\n def update_setting(item_id):\n return Setting.get_delete_put_post(item_id)\n\nCreate or update from a WTF form:\n\n.. code:: python\n\n @app.route('/setting_edit/', methods=['POST'])\n @app.route('/setting_add', methods=['POST']) \n def setting_edit(item_id=None):\n if item_id:\n item = Setting.query.get_or_404(item_id)\n else:\n item = {}\n form = EditForm(obj=item)\n\n if form.validate_on_submit():\n if item_id:\n try:\n item.request_update_form()\n flash('Your changes have been saved.')\n except Exception as e:\n flash(str(e), category='danger')\n return redirect(url_for('setting_edit', item_id=item_id))\n else:\n try:\n new_item = Setting.request_create_form()\n flash('Setting created.')\n return redirect(url_for('setting_edit', item_id=new_item.id))\n except Exception as e:\n flash('Error creating item: ' + str(e))\n\n return render_template(\n 'setting_edit.html',\n item=item,\n title='Edit or Create item',\n form=form\n )\n\nOptions\n=======\n\nExclude fields\n--------------\n\nList of model field names to not serialize at all.\n\n.. code:: python\n\n exclude_serialize_fields = []\n\nList of model field names to not serialize when return as json.\n\n.. code:: python\n\n exclude_json_serialize_fields = []\n\nVerify write and create\n-----------------------\n\n.. code:: python\n\n def verify(self, create=False):\n \"\"\"\n raise exception if item is not valid for put/patch/post\n :param: create - True if verification is for a new item\n \"\"\"\n\nOverride the mixin verify method to provide control and verification\nwhen updating and creating model items. Simply raise an exception\nwhen there is a problem. You can also modify `self` data before writing. See model example.\n\nControlling delete\n------------------\n\n.. code:: python\n\n def can_delete(self):\n \"\"\"\n raise exception if item cannot be deleted\n \"\"\"\n\nOverride the mixin can_delete to provide control over when an\nitem can be deleted. Simply raise an exception\nwhen there is a problem. See model example.\n\nUpdating fields specification\n-----------------------------\n\nList of model fields to be read from a form or JSON when updating an object. Normally\nadmin fields such as login_counts or security fields are excluded.\n\n.. code:: python\n\n update_fields = []\n\nUpdate Properties\n-----------------\n\nWhen returning a success code from a put or post update a dict\ncomposed of the property values from the update_properties list is returned\nas \"properties\".\n\n.. code:: python\n\n update_properties = []\n\nExample return JSON:\n\n.. code:: python\n\n class ExampleModel(db.Model, FlaskSerializeMixin):\n update_fields = ['new_hat_size']\n\n @property\n def new_hat_size(self):\n return self.head_size * self.ear_width\n\n.. code:: JavaScript\n\n // result update return message\n {message: \"Updated\", properties: {new_hat_size: 45.67} }\n\nThis can be used to communicate from the model on the server to the JavaScript code\ninteresting things from updates\n\nCreation fields used when creating specification\n------------------------------------------------\n\nList of model fields to be read from a form when creating an object.\n\n.. code:: python\n\n create_fields = []\n\nFiltering json list results\n---------------------------\n\nJson result lists can be filtered by using the `prop_filters` on either\nthe `get_delete_put_post` method or the `json_list` method.\n\nThe filter consists of one or more properties in the json result and\nthe value that it must match. Filter items will match against the\nfirst prop_filter property to exactly equal the value.\n\nExample:\n\n.. code:: python\n\n result = get_delete_put_post(prop_filters = {'key':'dogs'})\n\nSorting json list results\n-------------------------\n\nJson result lists can be sorted by using the `order_by_field` or the `order_by_field_desc` properties. To sort by id\nascending use this example:\n\n.. code:: python\n\n order_by_field = 'id'\n\nUpdate DateTime fields specification\n-------------------------------------\n\n`timestamp_fields` is a list of fields on the model to be set when updating or creating\nwith the value of `datetime.datetime.utcnow()`. The default field names to update are: `['timestamp', 'updated']`.\n\nExample:\n\n.. code:: python\n\n\n class ExampleModel(db.Model, FlaskSerializeMixin):\n # ....\n modified = db.Column(db.DateTime, default=datetime.utcnow)\n timestamp_fields = ['modified']\n\nOverride the timestamp default of `utcnow()` by replacing the `timestamp_stamper` class property with your\nown. Example:\n\n.. code:: python\n\n class ExampleModel(db.Model, FlaskSerializeMixin):\n # ....\n timestamp_stamper = datetime.datetime.now\n\nRelationships list of property names that are to be included in serialization\n-----------------------------------------------------------------------------\n\n.. code:: python\n\n relationship_fields = []\n\nIn default operation relationships in models are not serialized. Add any\nrelationship property name here to be included in serialization.\n\nSerialization converters\n------------------------\nThere are three built in converters to convert data from the database\nto a good format for serialization:\n\n* DATETIME - Removes the fractional second part and makes it a string\n* PROPERTY - Enumerates and returns model added properties\n* RELATIONSHIP - Deals with children model items.\n\nSet one of these to None or a value to remove or replace it's behaviour.\n\nAdding and overriding converter behaviour\n-----------------------------------------\n\nAdd values to the class property:\n\n.. code:: python\n\n column_type_converters = {}\n\nWhere the key is the column type name of the database column \nand the value is a method to provide the conversion.\n\nExample:\n\nTo convert VARCHAR(100) to a string:\n\n.. code:: python\n\n column_type_converters['VARCHAR(100)'] = lambda v: str(v)\n\nTo change DATETIME conversion behaviour, either change the DATETIME column_type_converter or\noverride the ``to_date_short`` method of the mixin. Example:\n\n.. code:: python\n\n import time\n\n class Model(db.model, FlaskSerializeMixin):\n # ...\n # ...\n def to_date_short(self, date_value):\n \"\"\"\n convert a datetime.datetime type to\n a unix like milliseconds since epoch\n :param date_value: datetime.datetime {object}\n :return: number\n \"\"\"\n if not date_value:\n return 0\n\n return int(time.mktime(date_value.timetuple())) * 1000\n\n\nConversion types (to database) add or replace update/create\n-----------------------------------------------------------\n\nAdd or replace to db conversion methods by using a list of dicts that specify conversions.\n\nDefault is:\n\n.. code:: python\n\n convert_types = [{'type': bool, 'method': lambda v: 'y' if v else 'n'}]\n\n* type: a python object type \n* method: a lambda or method to provide the conversion to a database acceptable value.\n\nMixin Helper methods and properties\n===================================\n\n``get_delete_put_post()``\n\nPut, get, delete, post and get-all magic method handler.\nNOTE: renamed from ``get_delete_put()``.\n\n====== ==============================================================================================================================\nMethod Operation\n====== ==============================================================================================================================\nGET returns one item when `item_id` is a primary key\nGET returns all items when `item_id` is None\nPUT updates item using `item_id` as the id from request json data\nDELETE removes the item with primary key of `item_id` if self.can_delete does not throw an error\nPOST creates and returns a Flask response with a new item as json from form body data or JSON body data when `item_id` is None\nPOST updates an item from form data using `item_id`. Returns Flask response of {'message':'something', 'error':'any error message'}\n====== ==============================================================================================================================\n\nSet the `user` parameter to restrict a certain user. Assumes that a model\nrelationship of user exists.\n\n.. code:: python\n\n @property\n def get_delete_put_post(self, item_id=None, user=None):\n \"\"\"\n get, delete or update with JSON a single model item\n post for form data\n :param item_id: the primary key id of the item - if none and method is get returns all items\n :param user: user to add as query item.\n :return: json object: {error, message}, or the item. error == None for correct operation\n \"\"\"\n\n``as_dict``\n\n.. code:: python\n\n @property\n def as_dict(self):\n \"\"\"\n the sql object as a dict without the excluded fields\n :return: dict\n \"\"\"\n\n``as_json``\n\n.. code:: python\n\n @property\n def as_json(self):\n \"\"\"\n the sql object as a json object without the excluded dict and json fields\n :return: json object\n \"\"\"\n\n``dict_list()``\n\n.. code:: python\n\n def dict_list(cls, query_result):\n \"\"\"\n return a list of dictionary objects from the sql query result\n :param query_result: sql alchemy query result\n :return: list of dict objects\n \"\"\"\n\n``json_list()``\n\nReturn a flask response in json format from a sql alchemy query result.\n\n.. code:: python\n\n @classmethod\n def json_list(cls, query_result):\n \"\"\"\n return a list in json format from the query_result\n :param query_result: sql alchemy query result\n :return: flask response with json list of results\n \"\"\"\n\nExample:\n\n.. code:: python\n\n @bp.route('/address/list', methods=['GET'])\n @login_required\n def address_list():\n items = Address.query.filter_by(user=current_user)\n return Address.json_list(items)\n\n``json_filter_by()``\n\nReturn a flask response in json format using a filter_by query.\n\n.. code:: python\n\n @classmethod\n def json_filter_by(cls, **kwargs):\n \"\"\"\n return a list in json format using the filter_by arguments\n :param kwargs: SQLAlchemy query.filter_by arguments\n :return: flask response with json list of results\n \"\"\"\n\nExample:\n\n.. code:: python\n\n @bp.route('/address/list', methods=['GET'])\n @login_required\n def address_list():\n return Address.filter_by(user=current_user)\n\n``json_first``\n\n.. code:: python\n\n def json_first(cls, **kwargs):\n \"\"\"\n return the first result in json format using the filter_by arguments\n :param kwargs: SQLAlchemy query.filter_by arguments\n :return: flask response json item or {} if no result\n \"\"\"\n\nLicensing\n---------\n\n- Apache 2.0\n\n.. |PyPI Version| image:: https://img.shields.io/pypi/v/flask-serialize.svg\n :target: https://pypi.python.org/pypi/flask-serialize\n\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "https://github.com/Martlark/flask-serialize/archive/1.0.7.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Martlark/flask-serialize", "keywords": "flask sqlalchemey serialize serialization serialise", "license": "Apache Software License", "maintainer": "", "maintainer_email": "", "name": "flask-serialize", "package_url": "https://pypi.org/project/flask-serialize/", "platform": "", "project_url": "https://pypi.org/project/flask-serialize/", "project_urls": { "Download": "https://github.com/Martlark/flask-serialize/archive/1.0.7.tar.gz", "Homepage": "https://github.com/Martlark/flask-serialize" }, "release_url": "https://pypi.org/project/flask-serialize/1.0.7/", "requires_dist": [ "EasyDict" ], "requires_python": "", "summary": "Easy to use JSON serialization and update/create for Flask and SQLAlchemey.", "version": "1.0.7" }, "last_serial": 5962567, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "1c21b048e7938fdcb8d09c8864be63ef", "sha256": "f6e5e9ca204763fe75467e3efcc3db59c724147f349f7f84a34101eec16333c4" }, "downloads": -1, "filename": "flask_serialize-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1c21b048e7938fdcb8d09c8864be63ef", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8404, "upload_time": "2019-07-27T09:45:02", "url": "https://files.pythonhosted.org/packages/f0/f2/269c789c7acb0fb66443432aeec0a26f98830b2352a7da1ae32e8b4eb98f/flask_serialize-0.0.1-py2.py3-none-any.whl" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "a54f7ec4f2db554dab6d5333c20c3c62", "sha256": "c46cf7a845a7924eec80a82fbac2594054ef02bb3889d2389562170512544fa0" }, "downloads": -1, "filename": "flask_serialize-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a54f7ec4f2db554dab6d5333c20c3c62", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9026, "upload_time": "2019-07-27T09:51:42", "url": "https://files.pythonhosted.org/packages/6d/41/05feae2fb48134b8d56eb885feaa2fb5952221c8011e432855c5c1dd0210/flask_serialize-0.0.2-py2.py3-none-any.whl" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "d4316b9686962cc907597c9906b6256e", "sha256": "9f5c915c01c908f89adb2702ade869a8da9ba58405b496491dae9bafe981dc2d" }, "downloads": -1, "filename": "flask_serialize-0.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d4316b9686962cc907597c9906b6256e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9036, "upload_time": "2019-07-28T02:59:12", "url": "https://files.pythonhosted.org/packages/cf/3d/098e5bfeb255a201d4aad6fccdafb873147595ef6ef02c393965afb95cab/flask_serialize-0.0.3-py2.py3-none-any.whl" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "811b6426bb2a97041bf86611509004e3", "sha256": "7451df22a0eb52d704ddab1d71592c75da330c12e1b294b82c7f333273de5650" }, "downloads": -1, "filename": "flask_serialize-0.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "811b6426bb2a97041bf86611509004e3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9035, "upload_time": "2019-07-28T04:08:52", "url": "https://files.pythonhosted.org/packages/90/a3/699c58ddadf1469e7c4f30338f6af8b6ab5baabd9a43674335054a6c93e2/flask_serialize-0.0.4-py2.py3-none-any.whl" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "5d51c303890fc197b79689b6a2d1008a", "sha256": "06b3db0a645dcb388e756e8cee568c2abd7eaa718f04eb39ab79405fafb2a019" }, "downloads": -1, "filename": "flask_serialize-0.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5d51c303890fc197b79689b6a2d1008a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9034, "upload_time": "2019-07-28T04:40:49", "url": "https://files.pythonhosted.org/packages/cb/9f/4c07bbb4e38329003e9fb9765d78f14912d5bf143ca00b9096d912ac7563/flask_serialize-0.0.5-py2.py3-none-any.whl" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "ff1af40271d1adbd9b6da328c1501632", "sha256": "23ed5b7631187814beddc68e1a497c69d0a20c184dcd387fa6966d8955621ac5" }, "downloads": -1, "filename": "flask_serialize-0.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ff1af40271d1adbd9b6da328c1501632", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11691, "upload_time": "2019-07-28T05:44:42", "url": "https://files.pythonhosted.org/packages/a0/f6/ff935669a5223f862673b2a3372674c20d5835744721d3d6e7eb931654f9/flask_serialize-0.0.6-py2.py3-none-any.whl" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "1aa6c25727dbb54da3ccdf220ed06a20", "sha256": "58ec5b7fcc5a98a5cf53ab2ec8d11ba8d8cbb845048c5cc89fbec45374e1e2f4" }, "downloads": -1, "filename": "flask_serialize-0.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1aa6c25727dbb54da3ccdf220ed06a20", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11810, "upload_time": "2019-07-28T23:37:50", "url": "https://files.pythonhosted.org/packages/ca/23/5d6de5e92fd2fadbb14dd2e0487ce98161ad37b95bbd7ac9efb0fec33662/flask_serialize-0.0.7-py2.py3-none-any.whl" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "1f2ad8af31aee2a46479621fc4099541", "sha256": "dbc7f319e764dcce8211ebc501c91cd9959ee216c4f9f19f0a2680159fd82702" }, "downloads": -1, "filename": "flask_serialize-0.0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1f2ad8af31aee2a46479621fc4099541", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12625, "upload_time": "2019-07-29T12:29:43", "url": "https://files.pythonhosted.org/packages/c3/9c/d10edddfc64f84cb48d5ec9d5a3f61ca19231541c9f9d5e027f614abbb62/flask_serialize-0.0.8-py2.py3-none-any.whl" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "923e735ffd8a7043c159604f0acc361e", "sha256": "74cffd2a26a9a5fba7d75e287d50a49db4cca7a97499e8dd0ce6d088764c8e0c" }, "downloads": -1, "filename": "flask_serialize-0.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "923e735ffd8a7043c159604f0acc361e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12845, "upload_time": "2019-07-30T02:07:40", "url": "https://files.pythonhosted.org/packages/c0/55/2837236e8515b5355ba52c73959abadb599b495190c68841dcec693df5ee/flask_serialize-0.0.9-py2.py3-none-any.whl" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "0edfb07782bd951bdecd6816fd14dc8e", "sha256": "3537f97950cbbb13b61ec2d5b0f1f939f3203aa799d8c345162c5f03b416c7ac" }, "downloads": -1, "filename": "flask_serialize-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0edfb07782bd951bdecd6816fd14dc8e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13157, "upload_time": "2019-08-07T02:51:27", "url": "https://files.pythonhosted.org/packages/5e/1c/72fb37eda51ccd4fbea81d62a15be80d14ea90addf7ded540fb678b6f841/flask_serialize-1.0.1-py2.py3-none-any.whl" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "bf2e06e0061bb7eafaed96731e8119ef", "sha256": "b639c84494a6ce906f7805a7d514f48341833d69d32188427c5a40f9dccdf04b" }, "downloads": -1, "filename": "flask_serialize-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bf2e06e0061bb7eafaed96731e8119ef", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13616, "upload_time": "2019-08-07T10:40:27", "url": "https://files.pythonhosted.org/packages/c3/88/73abeac986eb686f59ed158ecd33d752a4ef55db22d033a0af6f64b6c23c/flask_serialize-1.0.2-py2.py3-none-any.whl" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "fec22c64335dd7dc41e524bcb5a78632", "sha256": "79fa4eeba30cb3d760c7d39837d185452932152a7d6d918f7ced251d68bce8a9" }, "downloads": -1, "filename": "flask_serialize-1.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fec22c64335dd7dc41e524bcb5a78632", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13746, "upload_time": "2019-08-10T00:15:17", "url": "https://files.pythonhosted.org/packages/c0/a2/8dee65107061e1ef1dcc70e6d65836ef58f45ecd9e51bef646a4f7281325/flask_serialize-1.0.3-py2.py3-none-any.whl" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "3c843b63033705a6bf48c238facc7c59", "sha256": "fd04b22679c564390f13d57596342e50bdc361c62e8a6c3f9e61f88eeee531b6" }, "downloads": -1, "filename": "flask_serialize-1.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3c843b63033705a6bf48c238facc7c59", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14185, "upload_time": "2019-08-11T10:50:53", "url": "https://files.pythonhosted.org/packages/55/dd/cdcc4ba9115dc3741b2cce2be8d221ff508275a8a4d0320e22d32885b546/flask_serialize-1.0.4-py2.py3-none-any.whl" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "fa34aa43bd1fdc2776a7c8c2a9ffbfc8", "sha256": "f8629aa983a6314d9bd0d0dd8c06a099f66e1812416a466b0c6db9a908d705d9" }, "downloads": -1, "filename": "flask_serialize-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fa34aa43bd1fdc2776a7c8c2a9ffbfc8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14401, "upload_time": "2019-08-25T09:04:52", "url": "https://files.pythonhosted.org/packages/9f/1b/b481a782a6b0568090ce02441034c7e526ef2e5498eed64ab96f5f72be99/flask_serialize-1.0.5-py2.py3-none-any.whl" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "edfe15ab3d6c4b9aa015e251f958e411", "sha256": "987b38737527c2cf08726bfd58a00db5c73cc07c45656b887796fcddf130a181" }, "downloads": -1, "filename": "flask_serialize-1.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "edfe15ab3d6c4b9aa015e251f958e411", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14406, "upload_time": "2019-09-11T10:59:00", "url": "https://files.pythonhosted.org/packages/cb/b2/3d59c48b5948119c97a709ecbdc20d64255e0d406f01b7c736fc90eb7858/flask_serialize-1.0.6-py2.py3-none-any.whl" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "e7379b0d8fbbc8b2fd379d01b3f45a12", "sha256": "03dfd39401f0a72546228ef60008ca2a5ec67d6163b26b64c87bcf7f942aea5e" }, "downloads": -1, "filename": "flask_serialize-1.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e7379b0d8fbbc8b2fd379d01b3f45a12", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14713, "upload_time": "2019-10-12T01:51:23", "url": "https://files.pythonhosted.org/packages/32/c0/b9abbd15229cffbcc5c41b9be1afd526973a59f3a64881b7e957d2603ec2/flask_serialize-1.0.7-py2.py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e7379b0d8fbbc8b2fd379d01b3f45a12", "sha256": "03dfd39401f0a72546228ef60008ca2a5ec67d6163b26b64c87bcf7f942aea5e" }, "downloads": -1, "filename": "flask_serialize-1.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e7379b0d8fbbc8b2fd379d01b3f45a12", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14713, "upload_time": "2019-10-12T01:51:23", "url": "https://files.pythonhosted.org/packages/32/c0/b9abbd15229cffbcc5c41b9be1afd526973a59f3a64881b7e957d2603ec2/flask_serialize-1.0.7-py2.py3-none-any.whl" } ] }