{ "info": { "author": "Joachim Viide", "author_email": "jviide@iki.fi", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# tagged [![CircleCI](https://circleci.com/gh/jviide/tagged.svg?style=shield)](https://circleci.com/gh/jviide/tagged) [![PyPI](https://img.shields.io/pypi/v/tagged.svg?color=blue)](https://pypi.org/project/tagged/)\n\nA Python version of JavaScript's [tagged templates](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templates), mixed with Python 3's [f-strings](https://docs.python.org/3/reference/lexical_analysis.html#f-strings).\n\nFor a more involved example how this package can be used in practice, see [htm.py](https://github.com/jviide/htm.py) that implements JSX-like syntax in plain Python.\n\n## Installation\n\n```sh\n$ pip3 install tagged\n```\n\n## Usage\n\nThis package defines `tag`, a decorator for creating new tags. Let's define a simple one:\n\n```py\nfrom tagged import tag\n\n@tag\ndef t(strings, values):\n return strings, values\n```\n\nNow `t` can be called with a template string that can contain any Python 3 expression between `{` and `}`. The \"static\" parts of the string are listed in `strings` and the evaluated expressions are listed in `values`.\n\n```py\nstrings, values = t(\"1 + {2} equals {1 + 2}\")\n# strings == ('1 + ', ' equals ', '')\n# values == (2, 3)\n```\n\nBecause the expressions are evaluated in the current context they can refer to local variables:\n\n```py\na = [1, 2, 3]\nstrings, values = t(\"the sum of {a} is {sum(a)}\")\n# strings == ('the sum of ', ' is ', '')\n# values == ([1, 2, 3], 6)\n```\n\nDouble curly brackets are interpreted as a single textual curly bracket:\n\n```py\nstrings, values = t(\"Inline a set between {{ and }} like this: {({1, 2, 3})}\")\n# strings == ('Inline a set between { and } like this: ', '')\n# values == ({1, 2, 3},)\n```\n\n## rexample\n\nLet's define a custom tag `rex` that allows composing regular expressions from strings and other regular expressions.\n\n```py\nimport re\nfrom tagged import tag\n\n\n@tag\ndef rex(strings, values):\n pattern = strings[0]\n for value, string in zip(values, strings[1:]):\n if isinstance(value, re.Pattern):\n value = value.pattern\n elif isinstance(value, str):\n value = re.escape(value)\n else:\n raise TypeError(\"expected re.Pattern or str\")\n pattern += \"(?:\" + value + \")\" + string\n return re.compile(pattern)\n\n\ngreeting = re.compile(\"Hello|Hi|Greetings\")\nname = \"Python 3.7\"\n\nrex(\"{greeting}, {name}!\")\n# re.compile('(?:Hello|Hi|Greetings), (?:Python\\\\ 3\\\\.7)!')\n```\n\n## Development\n\n### Running Tests\n\n```sh\n$ python3 -m unittest discover -s tests\n```\n\n## License\n\nThis library is licensed under the MIT license. See [./LICENSE](./LICENSE).\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/jviide/tagged", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "tagged", "package_url": "https://pypi.org/project/tagged/", "platform": "", "project_url": "https://pypi.org/project/tagged/", "project_urls": { "Homepage": "https://github.com/jviide/tagged" }, "release_url": "https://pypi.org/project/tagged/0.0.2/", "requires_dist": null, "requires_python": "", "summary": "Tagged templates for Python", "version": "0.0.2" }, "last_serial": 5925013, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "2aa728469f9431db7e39051aa58751c1", "sha256": "32da45011fa32edfdd7561e22d8c5e70489f9cfdf803a34c260fec50638043a6" }, "downloads": -1, "filename": "tagged-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2aa728469f9431db7e39051aa58751c1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3428, "upload_time": "2019-07-08T15:21:28", "url": "https://files.pythonhosted.org/packages/89/ba/d2f72e5a874e3764cf9781724ca53a1ed59d54ee273685eccb9a1906d4ad/tagged-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "30df17b3c5a3160c5243723ed0f8710a", "sha256": "5afb4c5bc9713358d1355b5434fa0bda8ab9df460ddeff6339fcf8ebc674522b" }, "downloads": -1, "filename": "tagged-0.0.1.tar.gz", "has_sig": false, "md5_digest": "30df17b3c5a3160c5243723ed0f8710a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2387, "upload_time": "2019-07-08T15:21:30", "url": "https://files.pythonhosted.org/packages/60/82/ae92732f5e241f99a2330a8ef2b95c48a55522c4c8a57abba8a298dfe5a2/tagged-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "21b4504dfdb74e384b341985a8b649e7", "sha256": "6f9bbb98c083536c5ec283688ddc9cec830ac0de19ab4ad9fa12db66985f7469" }, "downloads": -1, "filename": "tagged-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "21b4504dfdb74e384b341985a8b649e7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4174, "upload_time": "2019-10-03T19:43:44", "url": "https://files.pythonhosted.org/packages/43/a8/bf957ffdcd91d1ffad19083e4af72269ff7bb832113e2558e8270d4efd22/tagged-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "430303baf6e3d4bf57199ef8957f5de0", "sha256": "fb1e830ce83b7df7e92d03ad349babad0c78eb1d1c5dd922e067f1079b119666" }, "downloads": -1, "filename": "tagged-0.0.2.tar.gz", "has_sig": false, "md5_digest": "430303baf6e3d4bf57199ef8957f5de0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3265, "upload_time": "2019-10-03T19:43:46", "url": "https://files.pythonhosted.org/packages/d0/5e/96ad04eb807533cb676a790bb2d38800c4236d108b49505da822a21b4472/tagged-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "21b4504dfdb74e384b341985a8b649e7", "sha256": "6f9bbb98c083536c5ec283688ddc9cec830ac0de19ab4ad9fa12db66985f7469" }, "downloads": -1, "filename": "tagged-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "21b4504dfdb74e384b341985a8b649e7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4174, "upload_time": "2019-10-03T19:43:44", "url": "https://files.pythonhosted.org/packages/43/a8/bf957ffdcd91d1ffad19083e4af72269ff7bb832113e2558e8270d4efd22/tagged-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "430303baf6e3d4bf57199ef8957f5de0", "sha256": "fb1e830ce83b7df7e92d03ad349babad0c78eb1d1c5dd922e067f1079b119666" }, "downloads": -1, "filename": "tagged-0.0.2.tar.gz", "has_sig": false, "md5_digest": "430303baf6e3d4bf57199ef8957f5de0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3265, "upload_time": "2019-10-03T19:43:46", "url": "https://files.pythonhosted.org/packages/d0/5e/96ad04eb807533cb676a790bb2d38800c4236d108b49505da822a21b4472/tagged-0.0.2.tar.gz" } ] }