{ "info": { "author": "Exahilosys", "author_email": "exahilosys@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "## Usage\n```py\nimport strdata\nimport functools\n\nreject = (None,)\n\nskip = reject.__contains__\n\ntypes = ('feline', 'canis')\n\npushers = {\n # what the asset is going to be looked up by\n 'name': (\n # what the unparsed value will be requested as\n 'name',\n # what the parsed value will be set against\n 'name',\n # the function used for transforming;\n # utils.apply uses the result of the first\n # function in the succeeding ones for validating it\n strdata.utils.apply(\n strdata.pushers.string(),\n strdata.utils.apply(\n len,\n strdata.checks.range(2, 32, left = False)\n )\n )\n ),\n 'alive': (\n 'alive',\n 'alive',\n # raw pushers for no validation\n strdata.pushers.boolean()\n ),\n 'gold coins': (\n 'gold_coins',\n 'gold_coins',\n strdata.utils.apply(\n strdata.pushers.decimal(),\n strdata.checks.range(0, 6.5)\n )\n ),\n 'interests': (\n 'likes',\n 'likes',\n strdata.utils.apply(\n strdata.pushers.array(\n strdata.utils.apply(\n functools.partial(\n strdata.pushers.string(),\n # we have to do this because\n # pushers require to know the\n # previous state of the value\n # they parse (even if sometimes\n # it's not really used for anything);\n # since we can't schemanticaly derive\n # this value from an array, we have\n # to explicitely pass it; (pushers.string\n # doesn't use the state like most pushers)\n None\n ),\n strdata.utils.apply(\n len,\n strdata.checks.range(4, 16)\n )\n )\n ),\n strdata.utils.apply(\n len,\n strdata.checks.range(1, 6)\n )\n )\n ),\n 'type': (\n 'type',\n 'type',\n strdata.utils.apply(\n strdata.pushers.string(),\n strdata.checks.include(types)\n )\n ),\n 'status': (\n 'status',\n 'status',\n strdata.utils.apply(\n strdata.pushers.string(),\n strdata.utils.apply(\n len,\n strdata.checks.range(4, 16)\n )\n )\n )\n}\n\npullers = {\n 'name': (\n 'name',\n 'nick',\n # pullers need no validation;\n # their job is to convert any data type to str\n strdata.pullers.string(),\n ),\n 'gold coins': (\n 'gold_coins',\n 'gold coins',\n strdata.pullers.decimal(point = 2)\n ),\n 'type': (\n 'type',\n 'kind',\n strdata.pullers.string()\n ),\n 'alive': (\n 'alive',\n 'alive',\n strdata.pullers.boolean(options = ('negative', 'positive'))\n ),\n 'likes': (\n 'likes',\n 'interests',\n strdata.pullers.array(strdata.pullers.string())\n ),\n 'status': (\n 'status',\n 'status',\n strdata.pullers.string()\n )\n}\n\ndata = {\n 'name': 'kitty',\n 'type': 'canis',\n 'alive': True,\n 'gold_coins': 4.234381,\n 'likes': ['pats', 'meows'],\n 'status': 'angry'\n}\n\ntest = (\n 'name '\n '-and alive -set f '\n '-and type -set feline '\n '-and interests -set -add purrs -pop meows -add yarn '\n '-and gold coins -set 5.234 '\n '-and status -set '\n)\n\nprint(test)\n\n# single is for display; pairs is for update\nsingle, pairs = strdata.parsers.pair(test)\n\nextras, junk = zip(*pairs)\n\n# here we \"pretend\" our pair's keys have\n# also been passed with no -set to let the\n# program know we are also seeking to view\n# those (ie. let pullers parse and return)\nsingle.extend((extra,) for extra in extras)\n\n# need a getter\nget = data.__getitem__\n\n# this is our new data\nresult = strdata.parsers.move(pushers, get, pairs)\n\nprint('old: ', data)\n\n# update our store with it\ndata.update(result)\n\nprint('new: ', data)\n\n# this is our new data, but all values are strings\nresult = strdata.parsers.move(pullers, get, single)\n\n# most results are generators\n# yielding key-value tuple pairs\nfinal = dict(result)\n\nprint('show:', final)\n```\nPlay around with the test and checks values. \nThere are push and check errors that can be raised!\n## Installing\n```\npython3 -m pip install strdata\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/Exahilosys/strdata/archive/v1.3.2.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Exahilosys/strdata", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "strdata", "package_url": "https://pypi.org/project/strdata/", "platform": "", "project_url": "https://pypi.org/project/strdata/", "project_urls": { "Download": "https://github.com/Exahilosys/strdata/archive/v1.3.2.tar.gz", "Homepage": "https://github.com/Exahilosys/strdata" }, "release_url": "https://pypi.org/project/strdata/1.3.2/", "requires_dist": [ "stroke" ], "requires_python": "", "summary": "String derived data manipulation.", "version": "1.3.2" }, "last_serial": 5192188, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "e41a7fd44bb4168cfd1d54520845ff82", "sha256": "00468611ee1429018feab53fce1cb9f20d6e01b0c0c55debb0936b0c840612dd" }, "downloads": -1, "filename": "strdata-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e41a7fd44bb4168cfd1d54520845ff82", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8416, "upload_time": "2019-01-21T21:41:46", "url": "https://files.pythonhosted.org/packages/70/2b/caa21bb0ece9c252f57175dd16b082694c2c2be74924289bfa4fefbbacb7/strdata-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ae5e7d44925d47bf6e346224492e8514", "sha256": "4641732fc4d75f617cfd415bc16e215eb2181b230382437e311c0fc201beeb7d" }, "downloads": -1, "filename": "strdata-1.0.0.tar.gz", "has_sig": false, "md5_digest": "ae5e7d44925d47bf6e346224492e8514", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6304, "upload_time": "2019-01-21T21:41:49", "url": "https://files.pythonhosted.org/packages/f2/c5/a03f0004c11ab5274b273b28d7b8187c25f113f421695e1f305c7e571faa/strdata-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "b1c80bc21a3ed64bd9e1b51a0fc63a69", "sha256": "4f59652a37ac721b6d6aae0c11cade8890aaf20fd866f4429ef8c6852d5d571b" }, "downloads": -1, "filename": "strdata-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b1c80bc21a3ed64bd9e1b51a0fc63a69", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8394, "upload_time": "2019-01-26T08:12:39", "url": "https://files.pythonhosted.org/packages/2d/7f/eb41de3cc60ab2b8c390615e06a70221b90e5c4ffd53064a47a1ab9640d2/strdata-1.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd3d995877f8e286638d75d9bf71cb80", "sha256": "fc35e11967d003823baa103b471f05045a2afe7c32a989438969b72fe6e3fee9" }, "downloads": -1, "filename": "strdata-1.1.0.tar.gz", "has_sig": false, "md5_digest": "cd3d995877f8e286638d75d9bf71cb80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6280, "upload_time": "2019-01-26T08:12:40", "url": "https://files.pythonhosted.org/packages/b7/74/275d731f4e2a522786bc43a611e78b33f47d88a41b8fb841d9baa148867f/strdata-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "d10ba215fcc36eb2ac23963e28be5e33", "sha256": "2e8f9b077ef7c5d8c39f73eb80bf66a98d2ffda0d581bcc1b8679611f1a64140" }, "downloads": -1, "filename": "strdata-1.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d10ba215fcc36eb2ac23963e28be5e33", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8388, "upload_time": "2019-01-27T11:19:32", "url": "https://files.pythonhosted.org/packages/fc/d5/cbad8cb2b4652b28f5192cf643de9b352165d701ee62f03cdffab24845bf/strdata-1.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b98c469df4ff58f415766f276998d4a9", "sha256": "3d8451d15c512e5b6c9a495ce188e4035e8444eb2bb7c57a621bb9a70a3d5b00" }, "downloads": -1, "filename": "strdata-1.1.1.tar.gz", "has_sig": false, "md5_digest": "b98c469df4ff58f415766f276998d4a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6282, "upload_time": "2019-01-27T11:19:33", "url": "https://files.pythonhosted.org/packages/ab/af/2ab6c96666db261d8c19d28af2e2fdc20497f69064a818aa61bf7c164beb/strdata-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "bef145dc19309801bb8b10448d0f5977", "sha256": "6319b716fe1db122a70f17d65c844d0fb8f2d472dbb61167993dc2d95038fb96" }, "downloads": -1, "filename": "strdata-1.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "bef145dc19309801bb8b10448d0f5977", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8417, "upload_time": "2019-01-27T11:48:40", "url": "https://files.pythonhosted.org/packages/bf/22/6473523e2963a3355ec324bf959daee5bab3212695d2884dd2f360eda4e7/strdata-1.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f3b0cd94924c75b23ccd97fd891b30d", "sha256": "14c2ef9dd8e51e984007150d69c58c34b614adb058ba5b1f3c3272fd046680ad" }, "downloads": -1, "filename": "strdata-1.1.2.tar.gz", "has_sig": false, "md5_digest": "8f3b0cd94924c75b23ccd97fd891b30d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6258, "upload_time": "2019-01-27T11:48:42", "url": "https://files.pythonhosted.org/packages/f2/d4/7bc593147bb546b74cf17448e63ccc48c589e6b4b048a344b2eaa07b3405/strdata-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "33fc931358537c512281600f25c75453", "sha256": "4cab334fec1b682ed3378fb0b7461db518b79c4868b04732c588b029d8a035fc" }, "downloads": -1, "filename": "strdata-1.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "33fc931358537c512281600f25c75453", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8439, "upload_time": "2019-01-28T12:05:14", "url": "https://files.pythonhosted.org/packages/12/05/decba21f9f461b05ae163c0436bf97ce740d5aef8a2e64c9b439bed64504/strdata-1.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db2afedbfa63313e728df70d70d7808d", "sha256": "b3d8ebe7afdcdcba6272c5eabf31db597f61d3d3ae37c788e24eb5056f0ee26f" }, "downloads": -1, "filename": "strdata-1.1.3.tar.gz", "has_sig": false, "md5_digest": "db2afedbfa63313e728df70d70d7808d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6297, "upload_time": "2019-01-28T12:05:15", "url": "https://files.pythonhosted.org/packages/c7/e4/cc9d8eaee383cd1455ed878c4201f8f4b0b52d4ccf2028f2cf163d534fec/strdata-1.1.3.tar.gz" } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "bbc4bc78438837121797cca0de261cca", "sha256": "83dab5b8ef7e3be8cca7260ba4b670676e765e8fe16d848d6ac24b48611e68c0" }, "downloads": -1, "filename": "strdata-1.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "bbc4bc78438837121797cca0de261cca", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8447, "upload_time": "2019-01-28T12:09:18", "url": "https://files.pythonhosted.org/packages/0d/e5/3b263337287dfedd2eda1667f3cb0571074ee26909ea513537d8dc60256e/strdata-1.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1af8faea52bec1bf6f88638cfff64b09", "sha256": "2b80bb8977499afa20fa08abc1b27ba719e970ad9d52419ae6a6e9a0fb2a1d49" }, "downloads": -1, "filename": "strdata-1.1.4.tar.gz", "has_sig": false, "md5_digest": "1af8faea52bec1bf6f88638cfff64b09", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6305, "upload_time": "2019-01-28T12:09:20", "url": "https://files.pythonhosted.org/packages/4f/a0/5239534f92f7adf49a495ea8baecd0a66b2ccf08e6c9029dd506a13d6097/strdata-1.1.4.tar.gz" } ], "1.1.5": [ { "comment_text": "", "digests": { "md5": "6b9aa9d0b050eb51c37f8cc913d9d69d", "sha256": "2b15927166dde22db8b29ca4dfbde22618cb296dce1af11ec4b93acb514253ec" }, "downloads": -1, "filename": "strdata-1.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "6b9aa9d0b050eb51c37f8cc913d9d69d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8435, "upload_time": "2019-01-30T09:53:09", "url": "https://files.pythonhosted.org/packages/42/cc/2c8013c84979916f240156bf2c7cdeecc41e0f68da61c531cf4a152f783d/strdata-1.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b2e72723095b49454e50e59e82144a85", "sha256": "cfd3f5f4c885ec87f94c5e7bb5a3d13a4b1998d6c9e551171b81c528da505e4c" }, "downloads": -1, "filename": "strdata-1.1.5.tar.gz", "has_sig": false, "md5_digest": "b2e72723095b49454e50e59e82144a85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6301, "upload_time": "2019-01-30T09:53:10", "url": "https://files.pythonhosted.org/packages/c2/64/5263dc6c8e6acda1b008ef5973693a9bfbf4f7f5f82937969d1c56c89406/strdata-1.1.5.tar.gz" } ], "1.1.6": [ { "comment_text": "", "digests": { "md5": "2820ec08440a1e5f1c8f71a00f51a5bc", "sha256": "d5b4403acdcdcd677cf143f1c56f6d5e1b78a8a7925fa6448ed3f1a8ae02e5de" }, "downloads": -1, "filename": "strdata-1.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "2820ec08440a1e5f1c8f71a00f51a5bc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8432, "upload_time": "2019-01-31T07:47:37", "url": "https://files.pythonhosted.org/packages/c2/2d/dc0534c3f072737ca2a8688fc55e9d0e898ea2a7d362403f25d52106365a/strdata-1.1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "987099946e87c4404452be2a9a06ca5d", "sha256": "7ed3f27fe863bb247a0a283a076ea968ef5f58113c3250ffa869b4ca4752a8cd" }, "downloads": -1, "filename": "strdata-1.1.6.tar.gz", "has_sig": false, "md5_digest": "987099946e87c4404452be2a9a06ca5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6319, "upload_time": "2019-01-31T07:47:38", "url": "https://files.pythonhosted.org/packages/fc/a0/d49279175600f1b45f8a248a3fe79752a0c977270af02c4a613802db2b02/strdata-1.1.6.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "18f27ea363aae8ef4936d790dc59b726", "sha256": "1ee9727f072ca845aadfa93d3fdc2b91d2a3bdafb3389e56d1d747ec18ef7a89" }, "downloads": -1, "filename": "strdata-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "18f27ea363aae8ef4936d790dc59b726", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10054, "upload_time": "2019-02-03T17:54:20", "url": "https://files.pythonhosted.org/packages/2a/9a/bb69b7eaaafd5e74b2cf758bb1c8af12ba2be2d6094b1c7c071338b843c2/strdata-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "77cd6cb181f0b72c7ad063f995542e0c", "sha256": "65dcd16ffabf3833954b9c2b82ff5cc59d16fbfdf033f52fceee47fbdef43185" }, "downloads": -1, "filename": "strdata-1.2.0.tar.gz", "has_sig": false, "md5_digest": "77cd6cb181f0b72c7ad063f995542e0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6014, "upload_time": "2019-02-03T17:54:21", "url": "https://files.pythonhosted.org/packages/a1/cc/24942a339116ad86746405cc322564a1d0e8bf13e729ee779e5d80db6bf5/strdata-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "547f9b860aede64934224a91d94e6a9f", "sha256": "9171be05dbd60f17e120154c5a2c3be82397d17cfa2103e3b7cb628cb38270ae" }, "downloads": -1, "filename": "strdata-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "547f9b860aede64934224a91d94e6a9f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10143, "upload_time": "2019-02-06T18:17:14", "url": "https://files.pythonhosted.org/packages/e9/47/266a5b319a25b7145c7224b074ee742c90c92494a4d28ce46501bc611df7/strdata-1.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1cab9492e6d2bde9c36c7d2a43aea62c", "sha256": "f7100dcb8076dd417614cfcb0a7f5450a360d6db2620db22c175a67bd8e3f437" }, "downloads": -1, "filename": "strdata-1.3.0.tar.gz", "has_sig": false, "md5_digest": "1cab9492e6d2bde9c36c7d2a43aea62c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6084, "upload_time": "2019-02-06T18:17:15", "url": "https://files.pythonhosted.org/packages/0c/58/0ce28a013896358fb219f53d1d546c584915dd457f761dc3edf403fbc574/strdata-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "dd7f09bbd0cc2e73e07d9bafb61c45a8", "sha256": "bfc7fedab6bcc91c0f4e4895ba11dda5b5f34ec87cadcbb5531b5d148fb2bb64" }, "downloads": -1, "filename": "strdata-1.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "dd7f09bbd0cc2e73e07d9bafb61c45a8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10194, "upload_time": "2019-02-20T21:27:25", "url": "https://files.pythonhosted.org/packages/13/b9/08df9d7cded6938ddf58919844318651bf97ac876f738aaac5171ec448b8/strdata-1.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e59ee0f548798efa186ab03d21a19a7b", "sha256": "52f6952c1f2530aef87b5a192095da3a668895b4a6cb26660f85fc0a5014a3b5" }, "downloads": -1, "filename": "strdata-1.3.1.tar.gz", "has_sig": false, "md5_digest": "e59ee0f548798efa186ab03d21a19a7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6237, "upload_time": "2019-02-20T21:27:26", "url": "https://files.pythonhosted.org/packages/08/6d/106592faf4138349f0112fd745f930b1780955e3b34c3759877b4ef6f49b/strdata-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "29c148c1560369d110d4d964a38f29cb", "sha256": "fd87e944408d1a1ac8c5ec3e13b88734a08f6b4cf7c27f17520c44f0df6e600e" }, "downloads": -1, "filename": "strdata-1.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "29c148c1560369d110d4d964a38f29cb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10180, "upload_time": "2019-04-26T10:58:22", "url": "https://files.pythonhosted.org/packages/1c/b0/8917165b17f33a96f596c04c48d2ad8f6b76c0bf4c5def947d40acf00d7e/strdata-1.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f108e4b088ca53805c0596d930af67ab", "sha256": "44156266dc734fbb56dd66bde3ee27193da7bc8c75114f606eb7fe0e8a917d02" }, "downloads": -1, "filename": "strdata-1.3.2.tar.gz", "has_sig": false, "md5_digest": "f108e4b088ca53805c0596d930af67ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6210, "upload_time": "2019-04-26T10:58:24", "url": "https://files.pythonhosted.org/packages/82/34/327f13f3b32288e40bc476f9b251030fca2b2a3a03008c82e7f16d27ab12/strdata-1.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "29c148c1560369d110d4d964a38f29cb", "sha256": "fd87e944408d1a1ac8c5ec3e13b88734a08f6b4cf7c27f17520c44f0df6e600e" }, "downloads": -1, "filename": "strdata-1.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "29c148c1560369d110d4d964a38f29cb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10180, "upload_time": "2019-04-26T10:58:22", "url": "https://files.pythonhosted.org/packages/1c/b0/8917165b17f33a96f596c04c48d2ad8f6b76c0bf4c5def947d40acf00d7e/strdata-1.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f108e4b088ca53805c0596d930af67ab", "sha256": "44156266dc734fbb56dd66bde3ee27193da7bc8c75114f606eb7fe0e8a917d02" }, "downloads": -1, "filename": "strdata-1.3.2.tar.gz", "has_sig": false, "md5_digest": "f108e4b088ca53805c0596d930af67ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6210, "upload_time": "2019-04-26T10:58:24", "url": "https://files.pythonhosted.org/packages/82/34/327f13f3b32288e40bc476f9b251030fca2b2a3a03008c82e7f16d27ab12/strdata-1.3.2.tar.gz" } ] }