{ "info": { "author": "Olivier Sallou", "author_email": "olivier.sallou@irisa.fr", "bugtrack_url": null, "classifiers": [], "description": "# Introduction\n\nThis library provides annotations on a MongoKit object (@mf_decorator) to analyse objects and create actions and forms on objects automatically.\n\nGoal is to generate an admin dashboard for each object (show/edit/delete per object and list of objects).\n\nRenderer is in charge of generating HTML per attribute type.\n\nMore customization will also be available to force type of the attribute (Checkbox etc...) in later releases.\n\nPyramid routes and templates will be set automatically to access objects via REST (though optional). Dashboard is accessible via /admin route.\nDashboard is not automatically installed, it is only for help and can (should?) be customized.\nCopy the pyramid directory content in your pyramid application according to your setup:\n - dashboard needs mf.css, mf.js\n - dashboard.mako is a template example and can be copied/adapted to get a base dashboard.\n\n# JSON renderer\n\nPyramid does not allow ObjectIds and datetime json serialization by default. To allow such\nserialization, one need to add to the pyramid init the following code:\n\n from pyramid.renderers import JSON\n from bson import json_util\n from bson.objectid import ObjectId\n from datetime import datetime\n # automatically serialize bson ObjectId to Mongo extended JSON\n json_renderer = JSON()\n\n def objectId_adapter(obj, request):\n return json_util.default(obj)\n def datetime_adapter(obj, request):\n return json_util.default(obj)\n json_renderer.add_adapter(ObjectId, objectId_adapter)\n json_renderer.add_adapter(datetime, datetime_adapter)\n config.add_renderer('json', json_renderer)\n\n# TODO\n\n see bugs/features in github\n\n# LIMITATIONS:\n\nMongoKit operators OR, NOT are not supported.\nIS operator is supported for strings. In this case, the renderer is\nautomatically set to a TextChoiceRenderer with options from IS list.\n\nArrayRenderer does not support arrays of complex objects, only arrays of basic types or dicts (but not arrays of arrays)\nCollection name for objects must match object class name with lowercase and a 's'. Example:\nclass User -> users\nclass Group -> groups\n\n# LICENSE\n\nLGPL\n\n# USAGE\n\nA sample pyramid application is available in pyramid directory, simply run app.sh\n\nPyramid acl permissions for dashboard access can be set via config, however, there is no acl on get/post/put/delete REST operations. Control is done via the *my* method (see below).\n\nAdd mf_decorator above your MongoKit classes (see pyramid/user.py for example).\n\nFor dashboard, to add User and Group, insert in Pyramid init :\n\n connection = Connection()\n connection.register([User,Group])\n Dashboard.set_connection(connection)\n Dashboard.add_dashboard([User,Group],config)\n or\n Dashboard.add_dashboard([User,Group],config,'/test') to add an URL prefix\n\nWarning: this should be added after your routes declaration because it inserts generic routes to match objets:\n\n /users/ (GET/POST)\n /users/id (PUT,DELETE)\n /groups/\n /groups/id\n ...\n\nMinimal expected interface is:(as in mongokit)\nsave()\ndelete()\nfind() via connection\nfind_one() via connection\n\nIf user must have only limited access to a query, i.e list only a subset of an object (/users), it is necessary to add to the object a function defined as:\n\n def my(self, control, request=None):\n '''\n Return a mongodb filter on object\n control is a mf.views.MF_LIST or MF_MANAGE according to expected access on object\n if method returns None, then no access is allowed\n if method returns {}, then access is allowed\n if method returns a mongo filter, it will be applied on request to access object(s)\n ....\n Request parameter is the pyramid request object, can be used to get\nparameters, authenticated user etc...\n return filter\n\nIf this function is not defined, then all elements are available via\nGET/PUT/POST/DELETE method.\n\nFilter is a pymongo filter\n\nIn the case of a MANAGE operation (GET/POST/DELETE/PUT for a specific object\ne.g. POST /notes/12 ), *my* is called on the object instance, and instance\nparameters can be used to decide of the operation is allowed. Usually, a\nMF_MANAGE will only return None(reject) or {} (accept), according to current\nuser and current object.\nA MF_LIST is not attached to a specific object instance (e.g. GET /notes) , so\nthe *my* method will be called on a *new* object instance (e.g. notes().my())\n\n\nOther functions may be implemented in objects to override default behaviour:\n\n def render(self,fields = None):\n \"\"\"\n Render in HTML form an object\n\n param: fields List of fields to show\n type: list\n rparam: HTML form\n rtype: str\n \"\"\"\n\n def render_search(self, fields = None):\n \"\"\"\n Render in HTML a search form an object\n\n param: fields List of fields to show, limited to first level of document\n type: list\n rparam: HTML form\n rtype: str\n \"\"\"\n\n def bind_form(self,request):\n \"\"\"\n Binds a request dictionnary to the object\n\n :param request: request.params.items() in the form [ (key1,value1), (key1,value2), (key2,value1), ...]\n :type request: list\n :return: list of fields in error\n \"\"\"\n\nIf any is defined in object, then object method is used, else default implementation is used.\n\n# Custom types\n\nIf using custom types in MongoKit (CustomType), library will use default TextRenderer. One can change the renderer afterward (see Custom display).\nHowever, class must define a new method *unserialize* to return an object from a string (to be able to map an HTML form attribute to an object attribute).\n\n\n class CustomStatus(CustomType):\n\n @staticmethod\n def unserialize(value)\n ''' unserizalize from str to expected format\n\n :param value: input value\n :type value: str\n :return: an integer for this example\n '''\n return int(value)\n \n ...\n\nIn this example, we take input string value coming from HTML request parameter and cast it to an int.\n\n\n# Custom display\n\nSome functions helps you to customize the rendering.\n\n Group.set_display_fields(['name','creation_date'])\n\nset_display_fields will define the parameters to display, and in which order. This will only work for \"first level\" parameters (not params of a dict).\n\n renderer = mf.renderer.TextChoiceRenderer(User,'email','')\n renderer.limit([ 'nomail', 'othermail@mail.fr', 'sample@nomail' ])\n\nDefines for the objects User a new renderer (TextRenderer by default), in this case a TextChoiceRenderer.\nSimply create a new renderer with class as first parameter and param name as second parameter to change the default renderer.\n\n\n renderer.add_extra_control('')\n\nAdds an extra button for the field (up to you to defined in Javascript what to do with this button).\n\n# Object references\n\nDBref are supported, but if one need to refer to an other object using\nObjectIds, it is possible to specify a parameter as a *SimpleReferenceRenderer*:\n\n User example: { \"mygroups\" : [{ \"groupid\" : basestring }] }, groupid is\n the id of a Group\n\n groupid_renderer = mf.renderer.SimpleReferenceRenderer(User,'groupid',Group,'mygroups')\n # If the reference is an ObjectID and not a string\n groupid_renderer.is_object_id = True\n # In the dashboard, to display a value, mf search by default the *name*\n # parameter. If it does not exists or is not the expected parameter, one\n # may use the following.\n # NB: set_display_field works only with top level parameters\n groupid_renderer.set_display_field(\"myfield\")\n\nThis specifies the User parameter *groupid* is in fact an ObjectId reference to\nthe Group object.\nThis initial setup is required to define the link between the objects as the\nlibrary cannot guess which object the objectid references.\n\nIn MongoKit definition, one can define the parameter link as a basestring or an\nObjectId and must declare the above example (an ObjectId does not give\ninformation on object)a\n\nIf parameter is defined as an ObjectId, one *can* simply call the set_reference\nfunction to update the renderer:\n\n User example: { \"mygroups\" : [{ \"groupid\" : ObjectId }] }\n\n renderer = User.get_renderer('mygroups.groupid')\n renderer.set_reference(Group)\n\n\n\n\nAcknowledgements:\n\nparseDateTime from http://aralbalkan.com/1512\n", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mobyle2/mf-pyramid", "keywords": null, "license": "LGPL", "maintainer": null, "maintainer_email": null, "name": "mf", "package_url": "https://pypi.org/project/mf/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/mf/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/mobyle2/mf-pyramid" }, "release_url": "https://pypi.org/project/mf/0.1.38/", "requires_dist": null, "requires_python": null, "summary": "MongoKit forms generation and Pyramid Administration Dashboard", "version": "0.1.38" }, "last_serial": 1237516, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "170535c0ca5c4573e5efccc01f5e3c3f", "sha256": "81f540ce6813ff2021a2ee2be60c7e7fa7b4c4f74d4e48746de294bdd4783ae3" }, "downloads": -1, "filename": "mf-0.1.1.tar.gz", "has_sig": false, "md5_digest": "170535c0ca5c4573e5efccc01f5e3c3f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11187, "upload_time": "2013-01-11T10:05:20", "url": "https://files.pythonhosted.org/packages/6d/56/dcbbf56742bacfa892de8a9b8c36fee82b3e325b8d17a1bc6dd80dbce358/mf-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "9485ed5becb1246b809cfe1ec9e8b432", "sha256": "e735fa2d036428305d7e6d8efd46ee437f744bcb815dc6b95f56937830916016" }, "downloads": -1, "filename": "mf-0.1.10.tar.gz", "has_sig": false, "md5_digest": "9485ed5becb1246b809cfe1ec9e8b432", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13428, "upload_time": "2013-02-28T12:26:29", "url": "https://files.pythonhosted.org/packages/c7/36/c4caa9b3ef030b0a186c9d5a2e39bf15eafe8e9b5ab58bc70808f8e2258d/mf-0.1.10.tar.gz" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "04670e1df1f922eb5d17a18045700af3", "sha256": "198262fa381f102c1e2b172753eebaa46c71472cf55a66b3168bfffb9c68ce4c" }, "downloads": -1, "filename": "mf-0.1.11.tar.gz", "has_sig": false, "md5_digest": "04670e1df1f922eb5d17a18045700af3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13463, "upload_time": "2013-03-12T15:26:27", "url": "https://files.pythonhosted.org/packages/af/20/99f2d576682ce369297346c5c1324577b7c72474f238446c11bfd14f1b06/mf-0.1.11.tar.gz" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "b119d6ab35dc51ae7e4acb11be425dd9", "sha256": "9a85727f268be54ad8e5bdd7a686d3fa16408dc699a161c91b60252b53157cb4" }, "downloads": -1, "filename": "mf-0.1.12.tar.gz", "has_sig": false, "md5_digest": "b119d6ab35dc51ae7e4acb11be425dd9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13900, "upload_time": "2013-03-18T09:21:05", "url": "https://files.pythonhosted.org/packages/a1/95/62c75623460caab24c0f6b1c83018278f2f98a162f824303d328abb598e1/mf-0.1.12.tar.gz" } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "612bd300240f1fb487bd0bc6c7fcbec0", "sha256": "551b4c7884986b1b44bab119ff71e52d8d7836d7667b262779b3353921fe6039" }, "downloads": -1, "filename": "mf-0.1.13.tar.gz", "has_sig": false, "md5_digest": "612bd300240f1fb487bd0bc6c7fcbec0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13911, "upload_time": "2013-03-28T10:30:09", "url": "https://files.pythonhosted.org/packages/77/ef/7c2bf6db8d12ca1da8f0d58144d70428ab79e788fa099108de7110e002af/mf-0.1.13.tar.gz" } ], "0.1.14": [ { "comment_text": "", "digests": { "md5": "69f1a955a7b3c8d881ff60b59d2317d3", "sha256": "ed20637b888f5506fef5646c25bd41a041f35e17cce82c19af131b543c2c7ca9" }, "downloads": -1, "filename": "mf-0.1.14.tar.gz", "has_sig": false, "md5_digest": "69f1a955a7b3c8d881ff60b59d2317d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13696, "upload_time": "2013-04-02T11:37:31", "url": "https://files.pythonhosted.org/packages/fa/d5/3ea03beb256fad2beede98ad9c49dd26902bb51bd059762e8446f53d3d6f/mf-0.1.14.tar.gz" } ], "0.1.15": [ { "comment_text": "", "digests": { "md5": "2bfa71b53e51ccf2747190c70c489f29", "sha256": "e93558abae5203d03cbb9f31cb539087dd2b4e955ee36a31c3b3b861415a711b" }, "downloads": -1, "filename": "mf-0.1.15.tar.gz", "has_sig": false, "md5_digest": "2bfa71b53e51ccf2747190c70c489f29", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13703, "upload_time": "2013-04-02T13:35:26", "url": "https://files.pythonhosted.org/packages/e2/a9/a9011aad7eb18ed86019fd3ed09c7402e6610c6d3b1ad284c4eaf6e5c8e5/mf-0.1.15.tar.gz" } ], "0.1.16": [ { "comment_text": "", "digests": { "md5": "a93d75e59d2f40083c699d096ab4b9cb", "sha256": "d98c2781db2056248b1f951fd68998a40199a24fae7f05d408c351a0a531e299" }, "downloads": -1, "filename": "mf-0.1.16.tar.gz", "has_sig": false, "md5_digest": "a93d75e59d2f40083c699d096ab4b9cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14467, "upload_time": "2013-04-24T07:24:27", "url": "https://files.pythonhosted.org/packages/6e/fa/2d764ac66c10dc875f1a05768fea3f0641682730301907b2bc73f19a25ff/mf-0.1.16.tar.gz" } ], "0.1.17": [ { "comment_text": "", "digests": { "md5": "76e094dd1d085b200c5e56e795e67c55", "sha256": "b086323dfa1cf0c5bc8659f71eb1aad873a73dd6407848fa36ff6cbd09133d8c" }, "downloads": -1, "filename": "mf-0.1.17.tar.gz", "has_sig": false, "md5_digest": "76e094dd1d085b200c5e56e795e67c55", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14441, "upload_time": "2013-05-17T09:44:10", "url": "https://files.pythonhosted.org/packages/0f/aa/126e01aa7814db6854884bcaf92d181b2ef7b7c9475c8d32212348546a3e/mf-0.1.17.tar.gz" } ], "0.1.18": [ { "comment_text": "", "digests": { "md5": "44aff40ec91f227c88d4a769763aa198", "sha256": "64b2780c7c509ce6d36bc8e4968a7395035f4e05858e7bde8d7b315563522e6d" }, "downloads": -1, "filename": "mf-0.1.18.tar.gz", "has_sig": false, "md5_digest": "44aff40ec91f227c88d4a769763aa198", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14586, "upload_time": "2013-05-20T10:50:58", "url": "https://files.pythonhosted.org/packages/bd/b2/9b51ed36e7ea6db47a49e3a084d4b5fba5d7f24a8b97f5278e6640df4b7d/mf-0.1.18.tar.gz" } ], "0.1.19": [ { "comment_text": "", "digests": { "md5": "396e2199b9549e1148fa1c93b26eb90f", "sha256": "df70e5adb522162881ebddc2b46c0b495acaa553cb6771ccd4ee32a218311c6c" }, "downloads": -1, "filename": "mf-0.1.19.tar.gz", "has_sig": false, "md5_digest": "396e2199b9549e1148fa1c93b26eb90f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14696, "upload_time": "2013-05-26T09:59:09", "url": "https://files.pythonhosted.org/packages/25/b0/7c2a64e06edc7cfba1400a33404d9a9da917837ec608d1f0ce861ef8efeb/mf-0.1.19.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "adb3e9e9bc99dafc751d050f1e7d4a04", "sha256": "bcce2ecd995c689c1dae1f77978fcc7ed4fc8998ab6f9425bc6aada7ac19801a" }, "downloads": -1, "filename": "mf-0.1.2.tar.gz", "has_sig": false, "md5_digest": "adb3e9e9bc99dafc751d050f1e7d4a04", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11719, "upload_time": "2013-01-11T11:31:47", "url": "https://files.pythonhosted.org/packages/0d/54/e72abf111c75bb97c6b692e110e8d7c5cc5df8351a61c1fe6cc2169f615d/mf-0.1.2.tar.gz" } ], "0.1.20": [ { "comment_text": "", "digests": { "md5": "18007f52e59d68243aaead2a95dff85e", "sha256": "8938ab3f22e3671ce64e0f1a889ae453d2c5fc15d19516be667f04a47cea342a" }, "downloads": -1, "filename": "mf-0.1.20.tar.gz", "has_sig": false, "md5_digest": "18007f52e59d68243aaead2a95dff85e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14716, "upload_time": "2013-05-29T09:17:42", "url": "https://files.pythonhosted.org/packages/0c/da/614db3fc4350e924b9566d4c796e1d369322141f8ac3d937439f95debbcf/mf-0.1.20.tar.gz" } ], "0.1.21": [ { "comment_text": "", "digests": { "md5": "4d1187c5f9ee21fcc9d04543f03267d9", "sha256": "633cf3e0a6a3f6fc2b0300b7177e6ea88d580b8055f800d58faf2bed26f7bcec" }, "downloads": -1, "filename": "mf-0.1.21.tar.gz", "has_sig": false, "md5_digest": "4d1187c5f9ee21fcc9d04543f03267d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15582, "upload_time": "2013-05-31T10:06:01", "url": "https://files.pythonhosted.org/packages/f0/43/f2dddd45cc12806e504b053459e20f9d2c0869ba2a50fa01a76e44cb2482/mf-0.1.21.tar.gz" } ], "0.1.22": [ { "comment_text": "", "digests": { "md5": "6322dc3a6456b5ec83d20c79de2d0bd9", "sha256": "c62f3cf09c978d7b9a8f6292707e5fa8b17b4e83d5c40f6c314c3e71f949a92d" }, "downloads": -1, "filename": "mf-0.1.22.tar.gz", "has_sig": false, "md5_digest": "6322dc3a6456b5ec83d20c79de2d0bd9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15903, "upload_time": "2013-06-04T06:36:35", "url": "https://files.pythonhosted.org/packages/39/73/20e141abed5f5c1acfbbb5714eb537bee677a453d4cab2fc0fedbe937eed/mf-0.1.22.tar.gz" } ], "0.1.23": [ { "comment_text": "", "digests": { "md5": "f348b93d5e65dc52262acfd76307a816", "sha256": "a00e1ec1882245825007abfde878fe01d19e75c11302cdb9ea6f351f052e3b24" }, "downloads": -1, "filename": "mf-0.1.23.tar.gz", "has_sig": false, "md5_digest": "f348b93d5e65dc52262acfd76307a816", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16336, "upload_time": "2013-06-07T14:21:25", "url": "https://files.pythonhosted.org/packages/9e/d1/24e8742acaca0829ea0d0a80e9f519a162713312506f588ab84d95e766a8/mf-0.1.23.tar.gz" } ], "0.1.24": [ { "comment_text": "", "digests": { "md5": "58fd5d7644b67d6262b55fb328e24190", "sha256": "c1f2671d0076da86f5e788ba51feb950828f1289625bc6a3480ae7db12808a6c" }, "downloads": -1, "filename": "mf-0.1.24.tar.gz", "has_sig": false, "md5_digest": "58fd5d7644b67d6262b55fb328e24190", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16342, "upload_time": "2013-06-21T09:01:26", "url": "https://files.pythonhosted.org/packages/79/ac/fec034addc8bc31ba41638b1c7f946d93184c4e9b2cbf54670f63b2abc2d/mf-0.1.24.tar.gz" } ], "0.1.25": [ { "comment_text": "", "digests": { "md5": "b89fdb8e9e6631c2ac669f9ae0db29e8", "sha256": "5c0a838a45d5874da24f0beb98f371d97c3aac2d7a0c14756ecbb1b61b5c8bc1" }, "downloads": -1, "filename": "mf-0.1.25.tar.gz", "has_sig": false, "md5_digest": "b89fdb8e9e6631c2ac669f9ae0db29e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16794, "upload_time": "2013-07-30T07:49:19", "url": "https://files.pythonhosted.org/packages/29/a0/e94f555893c42e08e6e2531ce7215f4a890c7655e9811d2116c467a5d2a1/mf-0.1.25.tar.gz" } ], "0.1.26": [ { "comment_text": "", "digests": { "md5": "71a8be67167a22d1c872bb7f4a967363", "sha256": "1ba8ff360710a1f64ecc56be26ab3a3b144663f5ddcb32141496ea874555093b" }, "downloads": -1, "filename": "mf-0.1.26.tar.gz", "has_sig": false, "md5_digest": "71a8be67167a22d1c872bb7f4a967363", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16807, "upload_time": "2013-09-30T11:11:25", "url": "https://files.pythonhosted.org/packages/da/9c/4737e30c4d1cbc1191d6189241d7b061a446b7ae5ebbb04d4de755de5de7/mf-0.1.26.tar.gz" } ], "0.1.27": [ { "comment_text": "", "digests": { "md5": "43ed951977365dfd91df93ec536e1ab2", "sha256": "fd7d96754592f13d3629825812cb1e28a101c00a0e8f6a1958cc1156c20e4f2d" }, "downloads": -1, "filename": "mf-0.1.27.tar.gz", "has_sig": false, "md5_digest": "43ed951977365dfd91df93ec536e1ab2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16894, "upload_time": "2013-10-17T12:24:27", "url": "https://files.pythonhosted.org/packages/fb/8e/dc3b1855b222b2e10649deaa91bfdbfd95589476f493f07e5022e74e647e/mf-0.1.27.tar.gz" } ], "0.1.28": [ { "comment_text": "", "digests": { "md5": "f205617ac589050d4c100192f8f4838b", "sha256": "22bde8fea411a8cc30a24a2f2538dbf22f1473cba9ed9a734aad2ca4d76ed626" }, "downloads": -1, "filename": "mf-0.1.28.tar.gz", "has_sig": false, "md5_digest": "f205617ac589050d4c100192f8f4838b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17134, "upload_time": "2013-12-06T10:28:37", "url": "https://files.pythonhosted.org/packages/8b/4b/f9b621732a8fc7262f9392a83b72245fd20b815642a98ee02fd9793831ff/mf-0.1.28.tar.gz" } ], "0.1.29": [ { "comment_text": "", "digests": { "md5": "0c94d07046bb1f3076511919e3dcc6cb", "sha256": "4cb54ad00c7cc82608df66a54988dfbea6ade7c33b1ef54435c2c3067115977a" }, "downloads": -1, "filename": "mf-0.1.29.tar.gz", "has_sig": false, "md5_digest": "0c94d07046bb1f3076511919e3dcc6cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17434, "upload_time": "2013-12-06T16:41:12", "url": "https://files.pythonhosted.org/packages/dc/cc/c10474ea7257f1d81f1d0d5aa649d27b6670d8db07e669ef343f875d783a/mf-0.1.29.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "5698e70edf6d64ea413de9db886ff88d", "sha256": "d793f57596c1354fcdf1a9b6e98835c555477e8326a60b6d24ca556c2ddcc874" }, "downloads": -1, "filename": "mf-0.1.3.tar.gz", "has_sig": true, "md5_digest": "5698e70edf6d64ea413de9db886ff88d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12291, "upload_time": "2013-01-12T09:28:03", "url": "https://files.pythonhosted.org/packages/b1/90/44d91162e89826f5134a460877ac5a818514eb9cc6958374950de489742f/mf-0.1.3.tar.gz" } ], "0.1.30": [ { "comment_text": "", "digests": { "md5": "ab932541b0b90e0214c8510dd4b0ba2e", "sha256": "382161ab36b918f86a4d3fc947549047e30ec7bee9fae6f92e886df1e3fdff15" }, "downloads": -1, "filename": "mf-0.1.30.tar.gz", "has_sig": false, "md5_digest": "ab932541b0b90e0214c8510dd4b0ba2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17439, "upload_time": "2013-12-09T10:51:43", "url": "https://files.pythonhosted.org/packages/e4/49/7770a92cb611d2b2c35bdd4a5ee388f0b78604e6551bed4ea58b7dd7976b/mf-0.1.30.tar.gz" } ], "0.1.31": [ { "comment_text": "", "digests": { "md5": "133385ee6a8e3856603076359d06d81d", "sha256": "c696c0c1216484a82a7ca3a70ddb32b5fd16137e626e319db64946a63f55fbc5" }, "downloads": -1, "filename": "mf-0.1.31.tar.gz", "has_sig": false, "md5_digest": "133385ee6a8e3856603076359d06d81d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18010, "upload_time": "2013-12-10T11:05:54", "url": "https://files.pythonhosted.org/packages/62/da/eda40d05fce0a69925dca08bf48bea39df33c96f3c650ef3a3264b9dca0b/mf-0.1.31.tar.gz" } ], "0.1.32": [ { "comment_text": "", "digests": { "md5": "b710756cca79911a11cb61db4884f03e", "sha256": "bbaf0cd4deada9d46f4e7902cb00b57b29b1cb6731733c453572c3013b41f366" }, "downloads": -1, "filename": "mf-0.1.32.tar.gz", "has_sig": false, "md5_digest": "b710756cca79911a11cb61db4884f03e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18138, "upload_time": "2013-12-12T14:40:05", "url": "https://files.pythonhosted.org/packages/80/43/95747d9911ca7e3bd9d6a3174e7f9209b2f4157ad3115095c26829df0466/mf-0.1.32.tar.gz" } ], "0.1.33": [ { "comment_text": "", "digests": { "md5": "0902875e2b874442538bfd90949a71ef", "sha256": "2aa776b24af404a002ac3140648f0f2d1c712b18a87a586da40ef18331ca386b" }, "downloads": -1, "filename": "mf-0.1.33.tar.gz", "has_sig": false, "md5_digest": "0902875e2b874442538bfd90949a71ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18168, "upload_time": "2013-12-20T17:00:06", "url": "https://files.pythonhosted.org/packages/4c/91/0c8a7ef6a5808a568236cd902d34c9196f111eefc2461c147398c91d8100/mf-0.1.33.tar.gz" } ], "0.1.36": [ { "comment_text": "", "digests": { "md5": "0193270ebf6d2d2e346289d2371099aa", "sha256": "f438a3e73b750c1a0d21cb6c246e6fd120bc8c92f9ca9d68ff4b75dda19b9555" }, "downloads": -1, "filename": "mf-0.1.36.tar.gz", "has_sig": false, "md5_digest": "0193270ebf6d2d2e346289d2371099aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18757, "upload_time": "2014-03-19T12:08:14", "url": "https://files.pythonhosted.org/packages/de/e6/c5e3436de004b1b2ec1495c5cd5b1c57b5ae9a9917fa7ab5ccb7fe74e1f8/mf-0.1.36.tar.gz" } ], "0.1.37": [ { "comment_text": "", "digests": { "md5": "3671dee1c606ea404a701cda1a54e727", "sha256": "6e15e1668908e81d6aa9997fc8e63f6402290de551e455d8e44f5352c795b482" }, "downloads": -1, "filename": "mf-0.1.37.tar.gz", "has_sig": false, "md5_digest": "3671dee1c606ea404a701cda1a54e727", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18814, "upload_time": "2014-04-18T08:01:25", "url": "https://files.pythonhosted.org/packages/df/86/5cc188082310c40db11a95200a190103a32d225ed2c3761b013e375c9bb3/mf-0.1.37.tar.gz" } ], "0.1.38": [ { "comment_text": "", "digests": { "md5": "058538e7fcd0fc9063c04957e963adf9", "sha256": "2ab20c98b2c5bfb36d9b11d35863d9b08a0ff34ee631b732ebbb50ebb640849d" }, "downloads": -1, "filename": "mf-0.1.38.tar.gz", "has_sig": false, "md5_digest": "058538e7fcd0fc9063c04957e963adf9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18827, "upload_time": "2014-09-25T09:13:53", "url": "https://files.pythonhosted.org/packages/67/24/9e311303683d5ec24e5e1c46370e51e17652ca37d91ffaf0d43869866ef5/mf-0.1.38.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "fc8f4abc4da6dd270ed4c0c425fdb033", "sha256": "7f3d202b73180bc1f4144fa90c0429b0fbbc945040c8735065c72992c7770bd0" }, "downloads": -1, "filename": "mf-0.1.4.tar.gz", "has_sig": true, "md5_digest": "fc8f4abc4da6dd270ed4c0c425fdb033", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12540, "upload_time": "2013-01-14T12:14:26", "url": "https://files.pythonhosted.org/packages/4c/ba/d6f278d7371d13ab6203c472e34b2c779362ff0955526c04e7c9b25e2a68/mf-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "c0e2a43637b750ff241a5e5ab1be8df7", "sha256": "522f3d910f0635557a489ceb92a49b20bbbac24b2aa35df679f8f6fa7c402401" }, "downloads": -1, "filename": "mf-0.1.5.tar.gz", "has_sig": true, "md5_digest": "c0e2a43637b750ff241a5e5ab1be8df7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12521, "upload_time": "2013-01-15T13:17:46", "url": "https://files.pythonhosted.org/packages/5a/03/40163f147387876465af1ae22a9f67a1874a230a5635759a6b06aee648a1/mf-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "51e6bb928a48595d5fbb941ffbc41f6f", "sha256": "d24407f6fe0e51c8347e30e470d41d9fd5ba29b939d2e9b58285b26e39eafcd9" }, "downloads": -1, "filename": "mf-0.1.6.tar.gz", "has_sig": true, "md5_digest": "51e6bb928a48595d5fbb941ffbc41f6f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12666, "upload_time": "2013-01-18T10:12:12", "url": "https://files.pythonhosted.org/packages/33/78/6bb8d4303fff9a6474c9c2b0788c106f0681f4a902e9a77f482df9007c54/mf-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "bf9ce9e0a364a4628c53acf890883f4a", "sha256": "86cbd9c3ff345d375c7c66aa470309aac5f36676a102acff26089cc549a501c0" }, "downloads": -1, "filename": "mf-0.1.7.tar.gz", "has_sig": true, "md5_digest": "bf9ce9e0a364a4628c53acf890883f4a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12865, "upload_time": "2013-01-21T10:35:34", "url": "https://files.pythonhosted.org/packages/b8/8b/d7652470e1ab82b91dd81e8cdd67afea8cfd760935cdbe9a4fa251df01fc/mf-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "3bad58486134437a1b56ff6c1232cd87", "sha256": "c1344f23eddbc1edcbaac10aa1b8d537e2730d1837845ed8bb5b2fd96c94082f" }, "downloads": -1, "filename": "mf-0.1.8.tar.gz", "has_sig": true, "md5_digest": "3bad58486134437a1b56ff6c1232cd87", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12954, "upload_time": "2013-01-22T13:25:11", "url": "https://files.pythonhosted.org/packages/98/ad/9942a2f11477d8c3ac51219332e778e16d9304ed5e4ec5b852fa8874d63f/mf-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "33b73cbb4456ec376509776f6f3b3083", "sha256": "4f6c1076896bd715a2e7f07971202a7a253de53eed31d8947631dd53341f7d22" }, "downloads": -1, "filename": "mf-0.1.9.tar.gz", "has_sig": true, "md5_digest": "33b73cbb4456ec376509776f6f3b3083", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13077, "upload_time": "2013-01-23T08:35:19", "url": "https://files.pythonhosted.org/packages/52/29/bbb57aec6567ef2bfef7d709bb7be68ba2b22dabfcaf5a98cc044bf90e5e/mf-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "058538e7fcd0fc9063c04957e963adf9", "sha256": "2ab20c98b2c5bfb36d9b11d35863d9b08a0ff34ee631b732ebbb50ebb640849d" }, "downloads": -1, "filename": "mf-0.1.38.tar.gz", "has_sig": false, "md5_digest": "058538e7fcd0fc9063c04957e963adf9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18827, "upload_time": "2014-09-25T09:13:53", "url": "https://files.pythonhosted.org/packages/67/24/9e311303683d5ec24e5e1c46370e51e17652ca37d91ffaf0d43869866ef5/mf-0.1.38.tar.gz" } ] }