{ "info": { "author": "Ken Elkabany", "author_email": "ken@elkabany.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Code Generators" ], "description": "# Code Writer [![Latest Version]][PyPI] [![Build Status]][Travis]\n\n[Latest Version]: https://img.shields.io/pypi/v/code-writer.svg\n[PyPI]: https://pypi.org/project/code-writer/\n[Build Status]: https://api.travis-ci.com/braincore/code-writer.svg?branch=master\n[Travis]: https://travis-ci.com/braincore/code-writer\n\nA Python 3 library with convenience functions for generating code in any\nlanguage.\n\nBased on the code generation backend in\n[Stone](http://www.github.com/dropbox/stone) that's used to generate code in\nmany languages: C#, Java, Python, Ruby, Rust, Typescript, and more.\n\n# Why?\n\nYou know all of the pains with code generation (coding, build process,\nmaintenance), but have decided you have no other choice. This library makes\ngenerating code a little bit more manageable.\n\n# Alternatives\n\nIf your code generation needs are simple, consider using a template language\nsuch as [Jinja2](https://github.com/pallets/jinja).\n\n# Install\n\n```bash\npip3 install code-writer\n```\n\n# Usage\n\n## Basics\n\nYou'll need to import `CodeWriter`:\n\n```python\nfrom code_writer import CodeWriter\n```\n\n## Examples\n\nYou probably want to write the output of `render()` to a file, but for\nillustrative purposes we'll print them.\n\n### Hello, world.\n\n```python\ncw = CodeWriter()\ncw.emit('hello,')\nwith cw.indent():\n cw.emit('world.')\nprint(cw.render())\n```\n\nOutput:\n```\nhello,\n world.\n```\n\n### Python if statement\n\n```python\ncw = CodeWriter()\ncw.emit('if True:')\nwith cw.indent():\n cw.emit('print(\"hello, world.\")')\nprint(cw.render())\n```\n\nOutput:\n```python\nif True:\n print(\"hello, world.\")\n```\n\n### Rust if statement\n\nUse `block()` to create an indented block enclosed by curly braces.\n\n```python\ncw = CodeWriter()\nwith cw.block(before='if true', delim=('{', '}')):\n cw.emit('println!(\"hello, world.\");')\nprint(cw.render())\n```\n\nOutput:\n```rust\nif true {\n println!(\"hello, world.\");\n}\n```\n\nYou can also set a default delimiter:\n\n```python\ncw = CodeWriter(default_delim=('{', '}'))\n```\n### Tabs\n\n```python\ncw = CodeWriter(use_tabs=True)\n```\n\n### Indent two spaces\n```python\ncw = CodeWriter(default_dent=2)\n```\n\n### Generate lists\n\n```python\ncw = CodeWriter()\ncw.emit_list([], ('[', ']'), before='let li1 = ', after=';')\ncw.emit_list(['1'], ('[', ']'), before='let li2 = ', after=';')\ncw.emit_list(['1', '2', '3'], ('[', ']'), before='let li3 = ', after=';')\ncw.emit_list(['1', '2', '3'], ('[', ']'), before='let li4 = ', after=';', compact=True)\nprint(cw.render())\n```\n\nOutput:\n```rust\nlet li1 = [];\nlet li2 = [1];\nlet li3 = [\n 1,\n 2,\n 3,\n];\nlet li4 = [1,\n 2,\n 3];\n```\n\n### Generate wrapped text\n\nThis is useful for documentation.\n\n```python\n# Artificially set col width low to show wrapped text\ncw = CodeWriter(default_width=25)\ncw.emit('/**')\ncw.emit_wrapped_text(\n '@param param1 an explanation of what this argument does.',\n prefix=' * ',\n indent_after_first=True,\n)\ncw.emit('*/')\nprint(cw.render())\n```\n\nOutput:\n```java\n/**\n * @param param1 an\n * explanation of\n * what this argument\n * does.\n*/\n```\n\n### Emit a preamble or header\n```python\npreamble = \"\"\"\\\nThis\nis\na\npreamble.\n\"\"\"\ncw = CodeWriter()\ncw.emit_raw(preamble)\nprint(cw.render())\n```\n\nOutput:\n```\nThis\nis\na\npreamble.\n```\n\n### Trim trailing newlines\n\nSometimes you'll want a newline after every iteration of logic, but not for the\nlast iteration.\n\n```python\ncw = CodeWriter()\nwith cw.block(before='if true', delim=('{', '}')):\n for i in range(3):\n cw.emit('println!(\"{}\");'.format(i))\n cw.emit()\nprint(cw.render())\n```\n\nOutput:\n```rust\nif true {\n println!(\"0\");\n\n println!(\"1\");\n\n println!(\"2\");\n\n}\n```\n\nThe gap after the last `println!()` is undesirable. To fix, do this:\n\n```python\ncw = CodeWriter()\nwith cw.block(before='if true', delim=('{', '}')):\n for i in range(3):\n cw.emit('println!(\"{}\");'.format(i))\n cw.emit()\n cw.trim_last_line_if_empty()\nprint(cw.render())\n```\n\nOutput:\n```rust\nif true {\n println!(\"0\");\n\n println!(\"1\");\n\n println!(\"2\");\n}\n```\n\n### Naming conventions\n\nDepending on your target language, you may need to output names that are\nPascalCase, camelCase, underscore_delimited, or dash-delimited.\n\n```python\nfrom code_writer import fmt_camel, fmt_dashes, fmt_pascal, fmt_underscores\n# The input name can be a mix of formatting. These helpers will aggressively\n# split the word and re-assemble as desired.\ntext = 'a-B-HiHo-merryOh_yes_no_XYZ'\nassert fmt_camel(text) == 'aBHiHoMerryOhYesNoXyz'\nassert fmt_dashes(text) == 'a-b-hi-ho-merry-oh-yes-no-xyz'\nassert fmt_pascal(text) == 'ABHiHoMerryOhYesNoXyz'\nassert fmt_underscores(text) == 'a_b_hi_ho_merry_oh_yes_no_xyz'\n```\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://www.github.com/braincore/code-writer", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "code-writer", "package_url": "https://pypi.org/project/code-writer/", "platform": "", "project_url": "https://pypi.org/project/code-writer/", "project_urls": { "Homepage": "https://www.github.com/braincore/code-writer" }, "release_url": "https://pypi.org/project/code-writer/1.1.1/", "requires_dist": null, "requires_python": "", "summary": "Library with convenience functions for generating code.", "version": "1.1.1" }, "last_serial": 5097267, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "eb0759fff18e29f37d83578aace6f039", "sha256": "e1371cd5ed3ef5596ed98b49f00aff596e1e31c751e6be181caa3f427539428c" }, "downloads": -1, "filename": "code_writer-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "eb0759fff18e29f37d83578aace6f039", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6872, "upload_time": "2019-03-03T12:17:55", "url": "https://files.pythonhosted.org/packages/1c/a8/d2444886e38810028e8faed23ffc378ae353217825de4ce245b750ab980c/code_writer-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3fdc40755fe90e3b43173554b0c9b308", "sha256": "d98df9d8d7eeb0ed6b8ccc96f146ee13a1974939a96b6827b76ee698ddabc03f" }, "downloads": -1, "filename": "code-writer-1.0.0.tar.gz", "has_sig": false, "md5_digest": "3fdc40755fe90e3b43173554b0c9b308", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7490, "upload_time": "2019-03-03T12:17:57", "url": "https://files.pythonhosted.org/packages/59/70/64a5da124622b77d2ed05f63adf3d3e568b4ae38562969e1c32b601382e8/code-writer-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "a14dd8dc68ea751a6d65a8e1ce36f3f6", "sha256": "c59449327823992e86b8d16c5c4dbdb532500e0a738956fe5d7451bca137656a" }, "downloads": -1, "filename": "code_writer-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a14dd8dc68ea751a6d65a8e1ce36f3f6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6874, "upload_time": "2019-03-03T12:22:23", "url": "https://files.pythonhosted.org/packages/7d/60/721b39768f3a2be0043994b0baa6f1fa2c74c37dbfd73142716098a77bc0/code_writer-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "40dc30b07ef37cfb13cbeb20e41df0ff", "sha256": "1e68433056c4569e12bed41ee539441c5b4af9ed76a601250f8e261a1a5fc9fe" }, "downloads": -1, "filename": "code-writer-1.0.1.tar.gz", "has_sig": false, "md5_digest": "40dc30b07ef37cfb13cbeb20e41df0ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7494, "upload_time": "2019-03-03T12:22:26", "url": "https://files.pythonhosted.org/packages/b7/da/c9e48608319fe85f7ea93bb1d41c94a71fe6c656acfb818313dfe6429d7a/code-writer-1.0.1.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "93fb03995af5756ce8e5baa6db3401bc", "sha256": "65bbf4616cd4f206a2e3fc5a9933a002d053d60ebdcc1dac66acc1a58cddd6b8" }, "downloads": -1, "filename": "code_writer-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "93fb03995af5756ce8e5baa6db3401bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7209, "upload_time": "2019-04-04T13:21:18", "url": "https://files.pythonhosted.org/packages/e3/30/68b4bb1593aad99b0f61d5f727eca2fcfe1845332068d3be9daeaad3535f/code_writer-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8e0e07f0c215537eb4bef76e675fcff3", "sha256": "485260d0444707876596c499bd9b1ef9a11dc720d741ac57c884216de9fa3f40" }, "downloads": -1, "filename": "code-writer-1.1.1.tar.gz", "has_sig": false, "md5_digest": "8e0e07f0c215537eb4bef76e675fcff3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7798, "upload_time": "2019-04-04T13:21:21", "url": "https://files.pythonhosted.org/packages/0b/82/36e1ed68464bfffed0febe71567547dfb86e7b9528491f54d6722a9133a7/code-writer-1.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "93fb03995af5756ce8e5baa6db3401bc", "sha256": "65bbf4616cd4f206a2e3fc5a9933a002d053d60ebdcc1dac66acc1a58cddd6b8" }, "downloads": -1, "filename": "code_writer-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "93fb03995af5756ce8e5baa6db3401bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7209, "upload_time": "2019-04-04T13:21:18", "url": "https://files.pythonhosted.org/packages/e3/30/68b4bb1593aad99b0f61d5f727eca2fcfe1845332068d3be9daeaad3535f/code_writer-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8e0e07f0c215537eb4bef76e675fcff3", "sha256": "485260d0444707876596c499bd9b1ef9a11dc720d741ac57c884216de9fa3f40" }, "downloads": -1, "filename": "code-writer-1.1.1.tar.gz", "has_sig": false, "md5_digest": "8e0e07f0c215537eb4bef76e675fcff3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7798, "upload_time": "2019-04-04T13:21:21", "url": "https://files.pythonhosted.org/packages/0b/82/36e1ed68464bfffed0febe71567547dfb86e7b9528491f54d6722a9133a7/code-writer-1.1.1.tar.gz" } ] }