{ "info": { "author": "Allan Vidal", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Topic :: Software Development :: Code Generators" ], "description": "# fstringen\nfstringen (pronounced: f-string-gen) is a library for writing text and code\ngenerators in Python. It builds upon [f-strings](\nhttps://docs.python.org/3/reference/lexical_analysis.html#f-strings) available\nin Python 3.6+, and it is based on two core concepts: models and generators.\n\nfstringen was designed to generate code based on OpenAPI specs, but that's\njust one possible use case. It can take any dictionary-equivalent model\n(including YAML and JSON) and turn that into a browsable model, with\nrudimentary support for cross-references. Generators then transform this model\nin the desired output.\n\nA `Selectable` is simply a Python dictionary (which may be sourced from a YAML\nor JSON file) representing a hierarchy, typically with deep nesting. The\n`select` operation is run on `Selectable`s to select a new `Selectable` based\non a path selection mechanism. `Model` is just an alias for `Selectable`, and\nit's usually used when referring to a `Selectable` loaded from a file\n\nGenerators are functions annotated with the `@gen()` decorator, which gives\nsome extra powers to special f-strings expressions in them (automagic\nindentation, smart list insertion and scope-related hacks). Generators may also\nbe configured to automatically output to files, with optional header notices.\n\n## Installing\nYou can install directly from PyPI:\n\n $ pip3 install fstringen --user\n\n## Using\nfstringen is based on special f-strings, called fstringstars. They are\nbasically triple-quoted f-strings that start and ends with an asterisk (`*`).\nThis special syntax indicates to fstringen that the string should be adapted\nwith extra features like automagic indentation, smart list insertion and\nscope-escaping tricks.\n\nA generator that outputs to a file looks like this (this is the `example.py`\nfile in this project):\n\n```py\nfrom fstringen import gen, Model\n\nmodel = Model.fromDict({\n \"structs\": {\n \"mystruct\": {\n \"color\": \"string\"\n },\n \"anotherstruct\": {\n \"name\": \"string\",\n \"age\": \"int\"\n }\n }\n})\n\n\n@gen()\ndef gen_struct(struct):\n fields = [\"{} {}\".format(field.name, field)\n for field in struct.select(\"*\")]\n\n return f\"\"\"*\n type {struct.name} struct {{\n {fields}\n }}\n\n *\"\"\"\n\n\n@gen(model=model, fname=\"myfile.go\", comment=\"//\")\ndef gen_myfile(model):\n return f\"\"\"*\n package main\n\n // Let's generate some structs!\n {[gen_struct(struct) for struct in model.select(\"/structs/*\")]}\n *\"\"\"\n```\n\nAll generator functions using fstringstars must be decorated with `@gen()`.\nWhen no parameters are given, the generator is considerate a subordinate\ngenerator (i.e., they need to be called explicitly from other generators).\nWhen the `model` and `fname` arguments are used, the generator becomes a file\ngenerator, which is automatically executed and output to that file when the\nscript exists (i.e., you don't need to explicitly call file generators).\n\nInside generators, fstringstars can use regular f-string `{expression}`\ninvocations.\n\nThe real power of fstringen comes with `Selectable`s and `Model`s, which allow\neasy selection of data (`Model` is just an alias for `Selectable`, and `Model`\nis usually used when referring to a `Selectable` loaded from a file):\n\n- Every `Selectable` has the `select` method, which takes a `path` and returns\n a new `Selectable` based on the query that path indicates.\n- Every `Selectable` has a `name` attribute, corresponding to the dictionary\n key or array index for that element.\n- If a path ends with `/*` and the preceding path contains a dictionary,\n a `Selectable` list of `Selectable`s is returned, containing all items in\n that dictionary.\n- If a path element ends with `->`, the value contained in that attribute is\n assumed to contain a path (absolute or relative), and that path is used to\n look up the referenced object in the same `Model`.\n- Three convenience methods are also available in `Selectable`s. All of them\n can take a path to query under that `Selectable`, of if called without a\n path, they apply to the `Selectable` in question:\n - `is_reference` checks whether a given `Selectable` contains a reference.\n - `has` allows for verification of the existence of a path under that\n `Selectable`.\n - `is_enabled` method verifies that the path exists and has a truthy value.\n\nThe two main imports from `fstringen` are `gen` and `Model`. An additional\nimport is available, `Mapper`, but it's entirely optional. It wraps a\ndictionary for looking up things like type mappings, and it returns alarming\nstrings when no match is found.\n\nFstringstars have one important distiction when compared to regular\ntriple-quoted strings: their first and last `\\n` are discarded when present.\nTherefore, the following are all equivalent:\n\n fstringstar = f\"\"\"*\n ...\n *\"\"\"\n\n fstringstar = f\"\"\"*...*\"\"\"\n\n fstringstar = f\"\"\"*\n ...*\"\"\"\n\n fstringstar = f\"\"\"*...\n *\"\"\"\n\nThis design intentional, especially because it enables the first style shown\nabove (newline at the start, newline at the end), which makes generators more\nreadable. Avoid using regular triple-quoted strings in generators to keep\nbehavior more preditable and consistent.\n\nAlso, please note that using single-quotes to define fstringstars is not\nsupported (i.e., `f'''*...*'''` is not a valid fstringstar).\n\n## Caveats\nfstringen does dangerous things with scope and function re-declaration. This\nmeans you should only use it in scripts that are code generators, and code\ngenerators alone (i.e., they don't do anything else). We sacrificed correctness\nfor neatness and ease-to-use.\n\nSince fstringen tramples over all common sense, pretty much all exceptions are\nintercepted and transformed into custom error messages. Otherwise, because of\nthe scope tricks and function re-declarations, most tracebacks and error\nmessages become useless and confusing.\n\nPython 3.6+ is required. PyYAML is an optional dependency.\n\n## Known issues\nBecause of Python limitations, a few things are not possible:\n\n**Quotes in fstringstars strings**\n\nJust as you can't have a triple-quoted string that starts or ends with quotes\nin Python:\n\n my_str = \"\"\"\"a\"\"\"\"\n\nYou can't have a fstringstar like this:\n\n my_fstringstar = f\"\"\"*\"a\"*\"\"\"\n\nThat's because Python can't figure out how that string starts or ends\n(fstringstars are compiled to triple-quoted Python f-strings). You achieve the\nsame result by escaping quotes with `//` when they start or end a string:\n\n my_fstringstar = f\"\"\"*\\\\\"a\\\\\"*\"\"\"\n\n**Don't compare with `is` and avoid `isinstance`**\n\nWhen dealing with a `Selectable` or a `Model`, don't use the `is` comparison\noperator. Consider the following code:\n\n mybool = model.select(\"/path/to/a/bool\")\n\nWhen checking whether `mybool` is `True` or `False`, do it using `==` or if in\na conditional, just check the value directly without a comparison\n(`if mybool`). The same applies to `None`.\n\nThe reason for this limitation is that `select` always returns a `Selectable`,\nand a `Selectable` can never be compared to Python objects using the `is`\noperator, which verifies that two expressions point to the same object.\nHowever, equality operators (`==` and `!=`) work just fine because `Selectable`\napplies some magic.\n\nBecause `NoneType` and `bool` cannot be subclassed in Python, a `Selectable`\nisn't able to inherit from those (as it does for `int`, `str`, `list`, `dict`,\netc.). For that reason, you should also avoid using `isinstance`. Instead, you\ncan verify the original type for a value by checking the `type` attribute in a\n`Selectable`.\n\n**Variable scoping in list comprehensions**\n\nList comprehensions have their own frame and local scope in Python 3+, and the\nscope-escaping tricks fstringen uses don't work in them.\n\nSo if you have code like this:\n\n myvar = \"myvalue\"\n\n return f\"\"\"*\n ...\n\n {[do_something(entity, myvar) for entity in model.select(\"/entities/*\")]}\n *\"\"\"\n\nIt will not work, because myvar will not be accesible to that list\ncomprehension. To work around this, you can either have the list comprehension\nouside the fstringstar, or directly embed the variable's value in the list\ncomprehension expression.\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/alnvdl/fstringen", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "fstringen", "package_url": "https://pypi.org/project/fstringen/", "platform": "", "project_url": "https://pypi.org/project/fstringen/", "project_urls": { "Homepage": "https://github.com/alnvdl/fstringen" }, "release_url": "https://pypi.org/project/fstringen/0.0.10/", "requires_dist": null, "requires_python": ">=3.6", "summary": "A text generator based on f-strings", "version": "0.0.10", "yanked": false, "yanked_reason": null }, "last_serial": 6210717, "releases": { "0.0.10": [ { "comment_text": "", "digests": { "md5": "09cd4d0ab09ec3fcb02212b71b2b893d", "sha256": "17e5cf1fcf3fcfc9a9a0cbdded16eb212d05a29d8f2aa6cdac34e1a6996df6cd" }, "downloads": -1, "filename": "fstringen-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "09cd4d0ab09ec3fcb02212b71b2b893d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15653, "upload_time": "2019-11-27T20:53:40", "upload_time_iso_8601": "2019-11-27T20:53:40.393457Z", "url": "https://files.pythonhosted.org/packages/d4/ed/25610dfa9463e7690754c6770e1f598619ddad11b9a44155ec9abd49827b/fstringen-0.0.10-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "3a25d985cada21ce15a53248eb94d8ad", "sha256": "8ee674f2c2991c581ab0c35cb4fe0fd717717c4b5cae1109ed2b55df85285e33" }, "downloads": -1, "filename": "fstringen-0.0.10.tar.gz", "has_sig": false, "md5_digest": "3a25d985cada21ce15a53248eb94d8ad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 14619, "upload_time": "2019-11-27T20:53:41", "upload_time_iso_8601": "2019-11-27T20:53:41.465443Z", "url": "https://files.pythonhosted.org/packages/15/f9/6b56fbc671f05e73008c9e3f9a682de85b912fee1fb4c08266b7bc5d89d6/fstringen-0.0.10.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "2b05285261cbb76b18f73cb783e281ab", "sha256": "369d8dc353aafd5d66963a85706f9abf075330170c7e438e0798f90c650a6651" }, "downloads": -1, "filename": "fstringen-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2b05285261cbb76b18f73cb783e281ab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10260, "upload_time": "2019-10-04T19:53:39", "upload_time_iso_8601": "2019-10-04T19:53:39.915960Z", "url": "https://files.pythonhosted.org/packages/c5/6a/74e39c87aa8d806453332e29b4e6931486f4b909d55e8b85ffa92bcae09b/fstringen-0.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "372987aabb23955e96beffab18db3d05", "sha256": "d4fecd87224d891d77aa899068bfc8f7fed969f1bfe5c962234b97269a34ab99" }, "downloads": -1, "filename": "fstringen-0.0.2.tar.gz", "has_sig": false, "md5_digest": "372987aabb23955e96beffab18db3d05", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7164, "upload_time": "2019-10-04T19:53:42", "upload_time_iso_8601": "2019-10-04T19:53:42.205622Z", "url": "https://files.pythonhosted.org/packages/ce/7a/af6c18eb7ab5f21d58f5e486eb9c4b0dbc4a730b42853c89b55b8c57e18d/fstringen-0.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "d49a3ea39d5dea994ee76f8684786f1e", "sha256": "291dc49f2ae1de7c6f933a80e17d3b296da1e4377e607ce4f7759312cdcf6072" }, "downloads": -1, "filename": "fstringen-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "d49a3ea39d5dea994ee76f8684786f1e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10400, "upload_time": "2019-10-18T00:31:13", "upload_time_iso_8601": "2019-10-18T00:31:13.207681Z", "url": "https://files.pythonhosted.org/packages/34/30/e34e8ff1da10e6f8dc44932cb83f28b89a5e5a9665e4e3ede5f1a10a0767/fstringen-0.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "311c3cea6a2714aef161a51334e996f5", "sha256": "338b3c24bad73083582d2fbef9dc40893ae4b1fa84ed30cc4df864a8760fb4e0" }, "downloads": -1, "filename": "fstringen-0.0.3.tar.gz", "has_sig": false, "md5_digest": "311c3cea6a2714aef161a51334e996f5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7291, "upload_time": "2019-10-18T00:31:14", "upload_time_iso_8601": "2019-10-18T00:31:14.434810Z", "url": "https://files.pythonhosted.org/packages/b8/14/13b19f963e292a19e8085d2f1e196f602f2bff21fe845bc58b0c6f16646f/fstringen-0.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "0fd3195b2c60c7368f893bf67904a357", "sha256": "0d81975dcc4ee6c04bbd63737b88fad1a48ccffdb2984666230cee9b89ae76ce" }, "downloads": -1, "filename": "fstringen-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "0fd3195b2c60c7368f893bf67904a357", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10986, "upload_time": "2019-10-28T16:46:02", "upload_time_iso_8601": "2019-10-28T16:46:02.790953Z", "url": "https://files.pythonhosted.org/packages/ae/40/b82d61a301b58891ac23d0300f1e0faa81cc484148bd834b1e84612c9e82/fstringen-0.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b864196e6dbcb0ba96fd247e92f19f26", "sha256": "8e86e57b620b640ac15c43689df02d88cb3ad57ac0f953c465a31f8b0b90b098" }, "downloads": -1, "filename": "fstringen-0.0.4.tar.gz", "has_sig": false, "md5_digest": "b864196e6dbcb0ba96fd247e92f19f26", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 7841, "upload_time": "2019-10-28T16:46:03", "upload_time_iso_8601": "2019-10-28T16:46:03.928551Z", "url": "https://files.pythonhosted.org/packages/7e/89/ab429383804a010a2e1a320ad6c2e8e043803a3f3f6d8eda85cf8b86bba3/fstringen-0.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "a1360546b65faa9606d26f7912f90af5", "sha256": "94ee5a73b75ce3f18773205ddc78c0f48a671ae068bd1592ac1413dede47c964" }, "downloads": -1, "filename": "fstringen-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "a1360546b65faa9606d26f7912f90af5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 11251, "upload_time": "2019-10-29T17:25:56", "upload_time_iso_8601": "2019-10-29T17:25:56.522499Z", "url": "https://files.pythonhosted.org/packages/3e/1d/0da5976ce60532745830df83e93af018e3005ae389751df8499baf1bba02/fstringen-0.0.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9536abd89b15863d7c53288040a731ae", "sha256": "406fdb5975a732f69df309a9fc90b7055a76fc3f021a7342c2814bd8a2ab2b5d" }, "downloads": -1, "filename": "fstringen-0.0.5.tar.gz", "has_sig": false, "md5_digest": "9536abd89b15863d7c53288040a731ae", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8747, "upload_time": "2019-10-29T17:26:00", "upload_time_iso_8601": "2019-10-29T17:26:00.413235Z", "url": "https://files.pythonhosted.org/packages/95/4a/3241f45a341883249dd0430f14d40cc52b7f7b9aafc574d541ae077b4f76/fstringen-0.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "a6812b78bc6b71e74fe02aff309ca6cc", "sha256": "5bec7f40effc479aa8ec9eb23d18fc723c2ac0ef9037653e617520bce54752c5" }, "downloads": -1, "filename": "fstringen-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "a6812b78bc6b71e74fe02aff309ca6cc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 11376, "upload_time": "2019-10-29T22:19:26", "upload_time_iso_8601": "2019-10-29T22:19:26.552350Z", "url": "https://files.pythonhosted.org/packages/3c/d2/c5dca9f5e11e57802b43005d901180f04eea78653a4b14d5c85f731e0b0c/fstringen-0.0.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "df5452c33be950ae0e19192a2d171905", "sha256": "c473b8d6682f324f029eb0968bc02cab6e1de60e440e2aec2c392fbdcc94a0b6" }, "downloads": -1, "filename": "fstringen-0.0.6.tar.gz", "has_sig": false, "md5_digest": "df5452c33be950ae0e19192a2d171905", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 9004, "upload_time": "2019-10-29T22:19:28", "upload_time_iso_8601": "2019-10-29T22:19:28.259294Z", "url": "https://files.pythonhosted.org/packages/2f/f2/19983a64e79859bc94882f7593ab813c07bfbda7724203cc9372f7213d10/fstringen-0.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "2324ca52274d112e35e5db8eabad039f", "sha256": "dfceef5762be6ffc4125e35e3818b1ccf0324f794d601973a1a7ed3abe02915f" }, "downloads": -1, "filename": "fstringen-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "2324ca52274d112e35e5db8eabad039f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14188, "upload_time": "2019-10-30T14:32:45", "upload_time_iso_8601": "2019-10-30T14:32:45.787046Z", "url": "https://files.pythonhosted.org/packages/84/8c/43fe1c2f111be0d51f89781f1fa0dcd4caf3cd14ffa1761dd6696a6947b9/fstringen-0.0.7-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "93067e695f223050da69fe2e6fa25dd4", "sha256": "d6a7376e733ef133d5fe573b9352322f94c7217d21dc20034a12f88d6086cade" }, "downloads": -1, "filename": "fstringen-0.0.7.tar.gz", "has_sig": false, "md5_digest": "93067e695f223050da69fe2e6fa25dd4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 12437, "upload_time": "2019-10-30T14:32:47", "upload_time_iso_8601": "2019-10-30T14:32:47.147502Z", "url": "https://files.pythonhosted.org/packages/d8/37/6afc7b53941a12b6b57ae16c1ffc01ff3c0e5b054fdadf119b9c1793622b/fstringen-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "f233144ea568872036df212ac0f0f40b", "sha256": "ce12828c895a04376cb3b1b1f8e5d7357ddb96e18ac63eb85d71266701d3f444" }, "downloads": -1, "filename": "fstringen-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "f233144ea568872036df212ac0f0f40b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15130, "upload_time": "2019-11-12T02:15:59", "upload_time_iso_8601": "2019-11-12T02:15:59.457046Z", "url": "https://files.pythonhosted.org/packages/f3/7e/abf4ed2e5ae2ecd300896a483131f26c15f151018e05316e33fe271b7e9d/fstringen-0.0.8-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ff8fb242a7cd1bb532773ac72588eec8", "sha256": "ef3abf3e9cba4355d61ba1270688a57eb9ab41b1b3673fcbe86c963f0ba400e6" }, "downloads": -1, "filename": "fstringen-0.0.8.tar.gz", "has_sig": false, "md5_digest": "ff8fb242a7cd1bb532773ac72588eec8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 13734, "upload_time": "2019-11-12T02:16:01", "upload_time_iso_8601": "2019-11-12T02:16:01.388220Z", "url": "https://files.pythonhosted.org/packages/2b/f9/16eab66ef62419fae86805d02d970e46aebb1241b7bdf1572da6f8c9e601/fstringen-0.0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "ae550742cf1d81d55fb63c0f67057c26", "sha256": "799dc101b0df9d82f3166d9493ddb4fa98f848577c5a728190a3af01077f91ae" }, "downloads": -1, "filename": "fstringen-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "ae550742cf1d81d55fb63c0f67057c26", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15637, "upload_time": "2019-11-14T01:25:43", "upload_time_iso_8601": "2019-11-14T01:25:43.899072Z", "url": "https://files.pythonhosted.org/packages/be/0a/c2c4c920c307d8441fc7ef9636e85b49678acb4237b9a39e44cebbcd4321/fstringen-0.0.9-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "20a8aa1a580ac4eb45683ae63dccaaa4", "sha256": "363c057101224b45b011679254cbf2d727f309e17760a0ae080fdea1e543bf7c" }, "downloads": -1, "filename": "fstringen-0.0.9.tar.gz", "has_sig": false, "md5_digest": "20a8aa1a580ac4eb45683ae63dccaaa4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 14621, "upload_time": "2019-11-14T01:25:45", "upload_time_iso_8601": "2019-11-14T01:25:45.445624Z", "url": "https://files.pythonhosted.org/packages/78/0a/39363c0757722cea627d34bdfc34fe4da8ff6091abd4673ea1a694a7c2df/fstringen-0.0.9.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "09cd4d0ab09ec3fcb02212b71b2b893d", "sha256": "17e5cf1fcf3fcfc9a9a0cbdded16eb212d05a29d8f2aa6cdac34e1a6996df6cd" }, "downloads": -1, "filename": "fstringen-0.0.10-py3-none-any.whl", "has_sig": false, "md5_digest": "09cd4d0ab09ec3fcb02212b71b2b893d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15653, "upload_time": "2019-11-27T20:53:40", "upload_time_iso_8601": "2019-11-27T20:53:40.393457Z", "url": "https://files.pythonhosted.org/packages/d4/ed/25610dfa9463e7690754c6770e1f598619ddad11b9a44155ec9abd49827b/fstringen-0.0.10-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "3a25d985cada21ce15a53248eb94d8ad", "sha256": "8ee674f2c2991c581ab0c35cb4fe0fd717717c4b5cae1109ed2b55df85285e33" }, "downloads": -1, "filename": "fstringen-0.0.10.tar.gz", "has_sig": false, "md5_digest": "3a25d985cada21ce15a53248eb94d8ad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 14619, "upload_time": "2019-11-27T20:53:41", "upload_time_iso_8601": "2019-11-27T20:53:41.465443Z", "url": "https://files.pythonhosted.org/packages/15/f9/6b56fbc671f05e73008c9e3f9a682de85b912fee1fb4c08266b7bc5d89d6/fstringen-0.0.10.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }