{ "info": { "author": "huntzhan", "author_email": "programmer.zhx@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 1 - Planning", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Software Development :: Libraries" ], "description": "magic-parameter |Build Status|\n==============================\n\n**WARNING: Interfaces of this project is UNSTABLE, might be changed in\nthe future!**\n\n``magic-parameter`` handles type checking for you.\n\nInstall\n-------\n\n::\n\n pip install magic-parameter\n\nSupports Python 2.7 and 3.3+.\n\nUsage\n-----\n\nConcepts\n~~~~~~~~\n\nParameter Declaration:\n\n- ``(, )``\n- ``(, , )``\n- ``(, , None)``\n\nType Declaration:\n\n- any **type object**, i.e. ``list``, ``int``, ``str``, ``FooBar``.\n- instance of ``magic-parameter.``:\n\n - ``magic_parameter.list_t()``\n - ``magic_parameter.tuple_t()``\n - ``magic_parameter.set_t()``\n - ``magic_parameter.dict_t(, )``\n\n- instance of ``magic-parameter.``\n\n - ``magic_parameter.or_t(, ...)``\n\nDecorators:\n\n- ``magic_parameter.function_parameter``\n- ``magic_parameter.method_parameter``\n- ``magic_parameter.method_init_parameter``\n- ``magic_parameter.class_init_parameter``\n\n``function_parameter(raw_parameter_decls)``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n``function_parameter`` is a function decorator.\n\nFlowing example defines a function with parameter ``a`` that accepts\n``list`` of ``int``\\ s.\n\n.. code:: python\n\n from magic_parameter import function_parameter, list_t\n\n\n @function_parameter([\n ('a', list_t(int)),\n ])\n def func(args):\n return args.a\n\nRuntime:\n\n.. code:: ipython\n\n In [2]: func([1, 2, 3])\n Out[2]: [1, 2, 3]\n In [3]: func([1, 2.0, 3])\n ---------------------------------------------------------------------------\n TypeError Traceback (most recent call last)\n ...\n TypeError: Rule:\n name: None\n type: \n Arg: 2.0\n\n``method_parameter(raw_parameter_decls, pass_by_function_argument=False, pass_by_cls_or_self_attributes=False, no_warning_on_cls_or_self_attributes=True)``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n``method_parameter`` is a class method decorator. ``method_parameter``\nprovides two ways to pass arguments:\n\n#. By function argument, same as function\\_parameter. In this case,\n ``pass_by_function_argument`` should be set as ``True``.\n#. By attributes binding to the first parameter of class method. In this\n case, ``pass_by_cls_or_self_attributes`` should be set as ``True``.\n By default, ``no_warning_on_cls_or_self_attributes=True``, meaning\n there's no warning on attribute override.\n\nFlowing example defines a class with two methods:\n\n#. ``func1`` is a ``classmethod`` with a parameter ``a``, accepting a\n ``dict`` with ``str`` as its key and ``int`` as its value.\n#. ``func2`` is a function with a parameter ``a``, accepting a ``list``\n or a ``tuple``.\n\n.. code:: python\n\n from magic_parameter import method_parameter, dict_t, or_t\n\n\n class Example(object):\n\n @classmethod\n @method_parameter(\n [\n ('a', dict_t(str, int)),\n ],\n pass_by_function_argument=True,\n )\n def func1(cls, args):\n return args.a\n\n @method_parameter(\n [\n ('a', or_t(list, tuple)),\n ],\n pass_by_cls_or_self_attributes=True,\n )\n def func2(self):\n return self.a\n\nRuntime:\n\n.. code:: ipython\n\n In [8]: Example.func1({'k1': 1, 'k2': 2})\n Out[8]: {'k1': 1, 'k2': 2}\n In [9]: Example.func1({'k1': 1, 1: 2})\n ---------------------------------------------------------------------------\n TypeError Traceback (most recent call last)\n ...\n TypeError: Rule:\n name: None\n type: \n Arg: 1\n\n In [16]: example = Example()\n\n In [17]: example.func2([1, 2, 3])\n Out[17]: [1, 2, 3]\n\n In [18]: example.func2((1, 2, 3))\n Out[18]: (1, 2, 3)\n\n In [19]: example.func2(1)\n ---------------------------------------------------------------------------\n TypeError Traceback (most recent call last)\n ...\n TypeError: 1 cannot match [, ]\n\n``method_init_parameter(raw_parameter_decls)``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n``method_init_parameter`` could be viewed as ``method_parameter`` with\n``pass_by_cls_or_self_attributes=True, no_warning_on_cls_or_self_attributes=True``\npartial binding. It's designed to declare the parameters of ``__init__``\nclass method.\n\nFollowing example defines a class accepting an ``int`` for the\ninitialization.\n\n.. code:: python\n\n from magic_parameter import method_init_parameter\n\n\n class Example(object):\n\n @method_init_parameter([\n ('a', int),\n ])\n def __init__(self):\n print(self.a)\n\nRuntime:\n\n.. code:: ipython\n\n In [3]: Example(1)\n 1\n Out[3]: <__main__.Example at 0x1029bda20>\n\n In [4]: Example(1.0)\n ---------------------------------------------------------------------------\n TypeError Traceback (most recent call last)\n ...\n TypeError: Rule:\n name: None\n type: \n Arg: 1.0\n\n``class_init_parameter(user_defined_class)``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n``class_init_parameter`` is a class decorator. ``class_init_parameter``\nwill extract parameter declarations from\n``user_defined_class.PARAMETERS``, then inject a ``__init__`` function\nto ``user_defined_class``.\n\nFollowing example defines a class accepting an ``int`` for the\ninitialization.\n\n.. code:: python\n\n from magic_parameter import class_init_parameter\n\n\n @class_init_parameter\n class Example1(object):\n\n PARAMETERS = [\n ('a', int),\n ]\n\n\n @class_init_parameter\n class Example2(object):\n\n PARAMETERS = [\n ('a', int),\n ]\n\n def __init__(self):\n print(self.a)\n\nRuntime:\n\n.. code:: ipython\n\n In [5]: Example1(1)\n Out[5]: \n\n In [6]: Example1(a=1)\n Out[6]: \n\n In [7]: Example1(1.0)\n ---------------------------------------------------------------------------\n TypeError Traceback (most recent call last)\n ...\n TypeError: Rule:\n name: None\n type: \n Arg: 1.0\n\n In [8]: Example2(1)\n 1\n Out[8]: \n\n.. |Build Status| image:: https://travis-ci.org/huntzhan/magic-parameter.svg?branch=master\n :target: https://travis-ci.org/huntzhan/magic-parameter", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "UNKNOWN", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "magic_parameter", "package_url": "https://pypi.org/project/magic_parameter/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/magic_parameter/", "project_urls": { "Download": "UNKNOWN", "Homepage": "UNKNOWN" }, "release_url": "https://pypi.org/project/magic_parameter/0.1.0/", "requires_dist": null, "requires_python": null, "summary": "Hacking In Python's Parameter Definition!", "version": "0.1.0" }, "last_serial": 2068187, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "334e7edf31bc662b315b81ef00f51d28", "sha256": "fcc24eda1ade8cbfc43e6c94f3ad6731ea105673a78351b424d7c401864660bb" }, "downloads": -1, "filename": "magic_parameter-0.1.0.tar.gz", "has_sig": false, "md5_digest": "334e7edf31bc662b315b81ef00f51d28", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19026, "upload_time": "2016-04-17T13:18:56", "url": "https://files.pythonhosted.org/packages/e2/42/2a9f21377d4826bc0e69f2f9b4a2fa4ccedf1fe4431fbcd3fe87b9cb4e99/magic_parameter-0.1.0.tar.gz" } ], "0.1.0.dev0": [], "0.1.0rc1": [ { "comment_text": "", "digests": { "md5": "b136843e3891d447c5cbe6586f34dbb8", "sha256": "041abe2b64ed99344c4d66321194d03e5fdafe72ab99f104f05602a18cb5af30" }, "downloads": -1, "filename": "magic_parameter-0.1.0rc1.tar.gz", "has_sig": false, "md5_digest": "b136843e3891d447c5cbe6586f34dbb8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11847, "upload_time": "2016-04-17T10:31:04", "url": "https://files.pythonhosted.org/packages/01/da/6bb5d310c64b818a89fd1440853ffd6bfd63e75deb4cbe123ec2898ed743/magic_parameter-0.1.0rc1.tar.gz" } ], "0.1.0rc2": [ { "comment_text": "", "digests": { "md5": "c9208e066fe705cab2e43d7e0f93537a", "sha256": "9b51135399eeb29a45e9e1407798e4e74ea651d6a44e4bd1ebf6dfd54fb2426b" }, "downloads": -1, "filename": "magic_parameter-0.1.0rc2.tar.gz", "has_sig": false, "md5_digest": "c9208e066fe705cab2e43d7e0f93537a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13440, "upload_time": "2016-04-17T10:57:14", "url": "https://files.pythonhosted.org/packages/24/df/2e4e41ced93049ac86f45a3eb3a713ff3b5b72831600c7a4455166c53164/magic_parameter-0.1.0rc2.tar.gz" } ], "0.1.0rc3": [ { "comment_text": "", "digests": { "md5": "e06c766fdae1c4528ad44611de728c99", "sha256": "44242a16e536dcaa7544c344d1a3c9976154e0aa25a614b2c0885d3bcdf9a8c1" }, "downloads": -1, "filename": "magic_parameter-0.1.0rc3.tar.gz", "has_sig": false, "md5_digest": "e06c766fdae1c4528ad44611de728c99", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13435, "upload_time": "2016-04-17T11:03:59", "url": "https://files.pythonhosted.org/packages/1a/5e/566b8ca74e4568d4904bcd896f30612ce27674607f57fb0ce18ed71acb54/magic_parameter-0.1.0rc3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "334e7edf31bc662b315b81ef00f51d28", "sha256": "fcc24eda1ade8cbfc43e6c94f3ad6731ea105673a78351b424d7c401864660bb" }, "downloads": -1, "filename": "magic_parameter-0.1.0.tar.gz", "has_sig": false, "md5_digest": "334e7edf31bc662b315b81ef00f51d28", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19026, "upload_time": "2016-04-17T13:18:56", "url": "https://files.pythonhosted.org/packages/e2/42/2a9f21377d4826bc0e69f2f9b4a2fa4ccedf1fe4431fbcd3fe87b9cb4e99/magic_parameter-0.1.0.tar.gz" } ] }