{ "info": { "author": "PAN, Myautsai", "author_email": "myautsai@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: POSIX :: Linux", "Programming Language :: C++", "Programming Language :: Python", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Libraries" ], "description": "libmc\n=====\n\n|build status|\n\nlibmc is a memcached client library for Python without any other\ndependencies in runtime. It's mainly written in C++ and Cython. libmc\ncan be considered as a drop in replacement for libmemcached and\n`python-libmemcached `__.\n\nlibmc is developing and maintaining by Douban Inc. Currently, It is\nworking in production environment, powering all web traffics in\ndouban.com. Realtime `benchmark\nresult `__ is\navailable on travis.\n\nBuild and Installation\n----------------------\n\nFor users:\n\n::\n\n pip install libmc\n\nUsage:\n\n.. code:: python\n\n import libmc\n\n mc = libmc.Client(['localhost:11211', 'localhost:11212'])\n mc.set('foo', 'bar')\n assert mc.get('foo') == 'bar'\n\nUnder the hood\n--------------\n\nUnder the hood, libmc consists of 2 parts: an internal fully-functional\nmemcached client implementation in C++ and a Cython wrapper around that\nimplementation. Dynamic memory allocation and memory-copy are slow, so\nwe tried our best to avoid them. The ``set_multi`` command is not\nnatively supported by the `memcached\nprotocol `__.\nSome techniques are applied to make ``set_multi`` command extremely fast\nin libmc (compared to some other similiar libraries).\n\nConfiguration\n-------------\n\n.. code:: python\n\n import libmc\n from libmc import (\n MC_HASH_MD5, MC_POLL_TIMEOUT, MC_CONNECT_TIMEOUT, MC_RETRY_TIMEOUT\n )\n\n mc = libmc.Client(\n [\n 'localhost:11211',\n 'localhost:11212',\n 'remote_host',\n 'remote_host mc.mike',\n 'remote_host:11213 mc.oscar'\n ],\n do_split=True,\n comp_threshold=0,\n noreply=False,\n prefix=None,\n hash_fn=MC_HASH_MD5,\n failover=False\n )\n\n mc.config(MC_POLL_TIMEOUT, 100) # 100 ms\n mc.config(MC_CONNECT_TIMEOUT, 300) # 300 ms\n mc.config(MC_RETRY_TIMEOUT, 5) # 5 s\n\n\n- ``servers``: is a list of memcached server addresses. Each address\n can be in format of ``hostname[:port] [alias]``. ``port`` and ``alias``\n are optional. If ``port`` is not given, default port ``11211`` will\n be used. ``alias`` will be used to compute server hash if given,\n otherwise server hash will be computed based on ``host`` and ``port``\n (i.e.: If ``port`` is not given or it is equal to ``11211``, ``host`` will be\n used to compute server hash. If ``port`` is not equal to ``11211``,\n ``host:port`` will be used).\n- ``do_split``: Memcached server will refuse to store value if size >=\n 1MB, if ``do_split`` is enabled, large value (< 10 MB) will be\n splitted into several blocks. If the value is too large (>= 10 MB),\n it will not be stored. default: ``True``\n- ``comp_threshold``: All kinds of values will be encoded into string\n buffer. If ``buffer length > comp_threshold > 0``, it will be\n compressed using zlib. If ``comp_threshold = 0``, string buffer will\n never be compressed using zlib. default: ``0``\n- ``noreply``: Whether to enable memcached's ``noreply`` behaviour.\n default: ``False``\n- ``prefix``: The key prefix. default: ``''``\n- ``hash_fn``: hashing function for keys. possible values:\n\n - ``MC_HASH_MD5``\n - ``MC_HASH_FNV1_32``\n - ``MC_HASH_FNV1A_32``\n - ``MC_HASH_CRC_32``\n\n default: ``MC_HASH_MD5``\n\n **NOTE:** fnv1\\_32, fnv1a\\_32, crc\\_32 implementations in libmc are\n per each spec, but they're not compatible with corresponding\n implementions in libmemcached.\n\n- ``failover``: Whether to failover to next server when current server\n is not available. default: ``False``\n\n- ``MC_POLL_TIMEOUT`` Timeout parameter used during set/get procedure.\n (default: ``300`` ms)\n- ``MC_CONNECT_TIMEOUT`` Timeout parameter used when connecting to\n memcached server on initial phase. (default: ``100`` ms)\n- ``MC_RETRY_TIMEOUT`` When a server is not available dur to server-end\n error. libmc will try to establish the broken connection in every\n ``MC_RETRY_TIMEOUT`` s until the connection is back to live.(default:\n ``5`` s)\n\n**NOTE:** The hashing algorithm for host mapping on continuum is always\nmd5.\n\nContributing to libmc\n---------------------\n\nFeel free to send a **Pull Request**. For feature requests or any\nquestions, please open an **Issue**.\n\nFor **SECURITY DISCLOSURE**, please disclose the information responsibly\nby sending an email to security@douban.com directly instead of creating\na GitHub issue.\n\nFAQ\n---\n\nDoes libmc support PHP?\n^^^^^^^^^^^^^^^^^^^^^^^\n\nNo. But if you like, you can write a wrapper for PHP based on the C++\nimplementation.\n\nIs Memcached binary protocol supported ?\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nNo. Only Memcached ASCII protocol is supported currently.\n\nWhy reinventing the wheel?\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nBefore libmc, we're using\n`python-libmemcached `__,\nwhich is a python extention for\n`libmemcached `__.\nlibmemcached is quite weird and buggy. After nearly one decade, there're\nstill some unsolved bugs.\n\nIs libmc thread-safe ?\n^^^^^^^^^^^^^^^^^^^^^^\n\nlibmc is a single-threaded memcached client. If you initialize a libmc\nclient in one thread but reuse that in another thread, a Python\nException ``ThreadUnsafe`` will raise in Python.\n\nIs libmc compatible with gevent?\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nYes, with the help of `greenify `__,\nlibmc is friendly to gevent. Read ``tests/shabby/gevent_issue.py`` for\ndetails.\n\n**Notice:**\n\n`gevent.monkey.patch_all()` will override `threading.current_thread().ident` to Greenlet's ID, this will cause libmc to throw a ThreadUnSafe error or run into dead lock, you should only patch the things that you need, e.g.\n\n.. code:: python\n\n from gevent import monkey\n monkey.patch_socket()\n\nAcknowledgments\n---------------\n\n- Thanks to `@fahrenheit2539 `__ and\n the llvm project for the standalone.\n `SmallVector `__\n implementation.\n- Thanks to `@miloyip `__ for the high\n performance `i64toa `__\n implementation.\n- Thanks to `Ivan Novikov `__ for the\n research in `THE NEW PAGE OF INJECTIONS BOOK: MEMCACHED\n INJECTIONS `__.\n- Thanks to the PolarSSL project for the md5 implementation.\n- Thanks to `@lericson `__ for the `benchmark\n script in\n pylibmc `__.\n- Thanks to the libmemcached project and some other projects possibly\n not mentioned here.\n\nContributors\n------------\n\n- `@mckelvin `__\n- `@zzl0 `__\n- `@windreamer `__\n- `@lembacon `__\n- `@seansay `__\n- `@mosasiru `__\n- `@jumpeiMano `__\n\n\nDocumentation\n-------------\n\nhttps://github.com/douban/libmc/wiki\n\nLICENSE\n-------\n\nCopyright (c) 2014-2015, Douban Inc. All rights reserved.\n\nLicensed under a BSD license:\nhttps://github.com/douban/libmc/blob/master/LICENSE.txt\n\n.. |build status| image:: https://travis-ci.org/douban/libmc.png\n :target: https://travis-ci.org/douban/libmc", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/douban/libmc", "keywords": "memcached,memcache,client", "license": "BSD License", "maintainer": "", "maintainer_email": "", "name": "libmc", "package_url": "https://pypi.org/project/libmc/", "platform": "", "project_url": "https://pypi.org/project/libmc/", "project_urls": { "Homepage": "https://github.com/douban/libmc" }, "release_url": "https://pypi.org/project/libmc/1.3.0/", "requires_dist": null, "requires_python": "", "summary": "Fast and light-weight memcached client for C++/Python", "version": "1.3.0" }, "last_serial": 5658554, "releases": { "0.4.3": [], "0.5.0": [ { "comment_text": "", "digests": { "md5": "7b78a1738f51c4f0d6b99ed41e2f07be", "sha256": "529ad60b02ee3dc03ef944548f5bc03bf56eb07e640bc983ae94cd76fbf87a85" }, "downloads": -1, "filename": "libmc-0.5.0.tar.gz", "has_sig": false, "md5_digest": "7b78a1738f51c4f0d6b99ed41e2f07be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48851, "upload_time": "2015-04-04T05:42:50", "url": "https://files.pythonhosted.org/packages/e6/ed/61d9e9f7784714de1fd82d02eb3dcfe6e63f76a2a6ff7649f69efbac6acb/libmc-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "44fb2f62329ce6a9f44d9aad26013f88", "sha256": "560c159e6ff6c41002cd7b86ab81d75073519a401b881a998aa10e1799bcd2c4" }, "downloads": -1, "filename": "libmc-0.5.1.tar.gz", "has_sig": false, "md5_digest": "44fb2f62329ce6a9f44d9aad26013f88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49251, "upload_time": "2015-04-14T06:51:36", "url": "https://files.pythonhosted.org/packages/44/b7/3891e9de0816cddfa7124e87d636e548403ff12c6e614601e76719bcb622/libmc-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "2673256c7857546d1fdbf5b27f94344d", "sha256": "c68d7b097c5200305e3ed5a74e7fcf2d1f009c04624f7c1073ce6fddc3218730" }, "downloads": -1, "filename": "libmc-0.5.2.tar.gz", "has_sig": false, "md5_digest": "2673256c7857546d1fdbf5b27f94344d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49542, "upload_time": "2015-04-23T06:55:49", "url": "https://files.pythonhosted.org/packages/d7/bb/a6c933044d5aca63a8cf6f99c853a0eb7f55981f4d1b90d2b6c6f0a091ee/libmc-0.5.2.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "57f73d6313d72697c13fe8eea4ea3495", "sha256": "b9c3d6a9989fce39db21936f84272eb35dbf8b39bec83e3d0a95486a18b97895" }, "downloads": -1, "filename": "libmc-0.5.3.tar.gz", "has_sig": false, "md5_digest": "57f73d6313d72697c13fe8eea4ea3495", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49639, "upload_time": "2015-05-15T02:13:04", "url": "https://files.pythonhosted.org/packages/d7/56/7ee8cdd242be8e7d01c1ab8c9369e8bea066e7e592fc338f0828de9cbaf1/libmc-0.5.3.tar.gz" } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "0ad564f1351c0dd2de84dd8a9b352bc9", "sha256": "5371d5aea5f949b177dc658d67357c03d57f9693ead6668bf678ca49cd747c44" }, "downloads": -1, "filename": "libmc-0.5.4-cp27-none-macosx_10_10_x86_64.whl", "has_sig": false, "md5_digest": "0ad564f1351c0dd2de84dd8a9b352bc9", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 134027, "upload_time": "2015-08-09T15:21:19", "url": "https://files.pythonhosted.org/packages/7f/23/24a6c32bdcbb876b2d8e1e50bbfe0f18a90fb0cab9c86dd640e23f555b14/libmc-0.5.4-cp27-none-macosx_10_10_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "5db7156d85db4dde1539a650eeb22ce7", "sha256": "7447147fd30bf7b5abcc78f474891d5c3d8a73f6b20ef6ba1030f985b1158ae0" }, "downloads": -1, "filename": "libmc-0.5.4.tar.gz", "has_sig": false, "md5_digest": "5db7156d85db4dde1539a650eeb22ce7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49843, "upload_time": "2015-07-16T10:28:11", "url": "https://files.pythonhosted.org/packages/8f/91/cb86ca2e931ff1720e84fef25444cfe9793d93909e6bf7069c58f1d2d11e/libmc-0.5.4.tar.gz" } ], "0.5.5": [ { "comment_text": "", "digests": { "md5": "c1db6c2248d7263ecb467e4e5e6a214a", "sha256": "4e8a1506d2c459a6d397b67eb82369d70f3b134f16ca1e89c004f3f48e521880" }, "downloads": -1, "filename": "libmc-0.5.5-cp27-none-macosx_10_10_x86_64.whl", "has_sig": false, "md5_digest": "c1db6c2248d7263ecb467e4e5e6a214a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 136807, "upload_time": "2015-09-09T08:57:02", "url": "https://files.pythonhosted.org/packages/f9/b1/35361ccf25fa95efd693d20d19b1f6935ca3cf00e0995db43a8322e3bcb0/libmc-0.5.5-cp27-none-macosx_10_10_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "3f2aec36701b109522a80be349d9fe5e", "sha256": "a763ceb17969c4f1e9e655f8bfd246abe093116bfd2df485447c4c5988a1e020" }, "downloads": -1, "filename": "libmc-0.5.5.tar.gz", "has_sig": false, "md5_digest": "3f2aec36701b109522a80be349d9fe5e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50458, "upload_time": "2015-09-09T08:56:37", "url": "https://files.pythonhosted.org/packages/c1/f0/9b187dab169f5eec43828d87ff61a654e121a40545363b3c1c5419607ccb/libmc-0.5.5.tar.gz" } ], "0.5.6": [ { "comment_text": "", "digests": { "md5": "afd633c0c21a8202ffe77352cc4b104c", "sha256": "1440630f13db286d7ff04aae576d1d16e7064d762bb8d8bd3f371dad989d4657" }, "downloads": -1, "filename": "libmc-0.5.6-cp27-none-macosx_10_10_x86_64.whl", "has_sig": false, "md5_digest": "afd633c0c21a8202ffe77352cc4b104c", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 136854, "upload_time": "2015-11-03T09:12:25", "url": "https://files.pythonhosted.org/packages/bd/14/5dbbc1da74a2b553a44296f238a827ed45841973e1e33e25e02f4c50e24c/libmc-0.5.6-cp27-none-macosx_10_10_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "13295ad4416a26d73150a82d482cc746", "sha256": "11eaa75d15571b1a90de42398e6bd16aadb33a654f632775bfe720d2bea329f7" }, "downloads": -1, "filename": "libmc-0.5.6.tar.gz", "has_sig": false, "md5_digest": "13295ad4416a26d73150a82d482cc746", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 145958, "upload_time": "2015-11-03T09:06:40", "url": "https://files.pythonhosted.org/packages/cb/0f/36b2d1aaf09401408aac0fd0d615192e2d93a5c23512b9db734eeff54275/libmc-0.5.6.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "fb3e82eab59ad6876407698fa62dafb5", "sha256": "f464fe239e5decfebdfb01208db13188b3059671098fb183be5daf024f7cff59" }, "downloads": -1, "filename": "libmc-1.0.0-cp27-none-macosx_10_11_x86_64.whl", "has_sig": false, "md5_digest": "fb3e82eab59ad6876407698fa62dafb5", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 136936, "upload_time": "2016-03-24T04:50:09", "url": "https://files.pythonhosted.org/packages/2a/35/0112c36d97373ee187e1a1d42585976817f38fe846c8c7b448621851c5d7/libmc-1.0.0-cp27-none-macosx_10_11_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "f19a0aaeede56843e694b771568db9b6", "sha256": "25723e13942e89dc833e346d1844227dfacf5f848ef6c94fd18220e66b2b2dec" }, "downloads": -1, "filename": "libmc-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f19a0aaeede56843e694b771568db9b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51406, "upload_time": "2016-03-24T04:46:35", "url": "https://files.pythonhosted.org/packages/94/07/b6e244cde72be411a3526cceebc3a23e225d608c4835247031eb4a282d73/libmc-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "f29e2e9a67acac6b001a0b67dc890542", "sha256": "6e6b468f487db1169bf69e4668626a3eeaeeb95a7071d0c9c9665f53322672cf" }, "downloads": -1, "filename": "libmc-1.0.1-cp27-cp27m-macosx_10_11_intel.whl", "has_sig": false, "md5_digest": "f29e2e9a67acac6b001a0b67dc890542", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 274382, "upload_time": "2016-05-20T06:45:02", "url": "https://files.pythonhosted.org/packages/74/ca/f0578540574dd734f81af8b69851cc911e6b6fcc25155ffaafb4567aaf68/libmc-1.0.1-cp27-cp27m-macosx_10_11_intel.whl" }, { "comment_text": "", "digests": { "md5": "95f95c33e77d823d215c47f8612d4fa4", "sha256": "cfac984444bd98071c77c7b247e3710da172698ddb6263fcc9d318a9000b2c53" }, "downloads": -1, "filename": "libmc-1.0.1.tar.gz", "has_sig": false, "md5_digest": "95f95c33e77d823d215c47f8612d4fa4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51227, "upload_time": "2016-05-20T06:41:30", "url": "https://files.pythonhosted.org/packages/73/64/98bc676faba78be7e65f0b7ce8d2b201a3c942cc0c9b143abd987f322f5d/libmc-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "1a68e587049e55da90dc09c0b7364825", "sha256": "5d8a9a64611eec5341eee075dbbc6daec34c1e3e107392a544501e2586d8b8d4" }, "downloads": -1, "filename": "libmc-1.1.0-cp27-cp27m-macosx_10_12_intel.whl", "has_sig": false, "md5_digest": "1a68e587049e55da90dc09c0b7364825", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 273530, "upload_time": "2016-11-08T05:21:21", "url": "https://files.pythonhosted.org/packages/9d/a0/9520fab72d19f91ac0c733a6af9fa2680eb825ed5229a11d2a3386b7a8b0/libmc-1.1.0-cp27-cp27m-macosx_10_12_intel.whl" }, { "comment_text": "", "digests": { "md5": "e26c8a5efd971767ab7928737c4e3606", "sha256": "1083c94da4368cd9f6fcf62ea0b0dbd4138b3296684a47038e11586b14482545" }, "downloads": -1, "filename": "libmc-1.1.0-py2.7-linux-x86_64.egg", "has_sig": false, "md5_digest": "e26c8a5efd971767ab7928737c4e3606", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 493705, "upload_time": "2016-11-08T04:23:44", "url": "https://files.pythonhosted.org/packages/94/9d/4f6ef2ee956b975c035def9141c726a5ab72339cff897724b74da626fb18/libmc-1.1.0-py2.7-linux-x86_64.egg" }, { "comment_text": "", "digests": { "md5": "fe88ccde73591b1be1eb7c2268282022", "sha256": "194b6bfa6f18310abeb2743a4657ed7e07b1397c8eca00e865a1ea7bcb69364b" }, "downloads": -1, "filename": "libmc-1.1.0-py3.5-linux-x86_64.egg", "has_sig": false, "md5_digest": "fe88ccde73591b1be1eb7c2268282022", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 509276, "upload_time": "2016-11-08T04:27:51", "url": "https://files.pythonhosted.org/packages/84/f1/1b687d0610d8f3f570e7f7a4183968b5693d1926312ff2f57f64cb82183b/libmc-1.1.0-py3.5-linux-x86_64.egg" }, { "comment_text": "", "digests": { "md5": "69ba5ef6aa0da21b4caa5b06ba101002", "sha256": "62778fac933bd7d351f580bf562e2955f2b1996bce75b32026885c9063653cbb" }, "downloads": -1, "filename": "libmc-1.1.0.tar.gz", "has_sig": false, "md5_digest": "69ba5ef6aa0da21b4caa5b06ba101002", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54823, "upload_time": "2016-11-08T04:23:47", "url": "https://files.pythonhosted.org/packages/2f/94/65bd2233f7ae6d4ae4b8d3f3548847b2fd221d31173da953e845e54ea932/libmc-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "02c1a970aa3bb2c549675971fc3a108f", "sha256": "bcae308fa213db3693d97ccf14397fba66bfc965192fbd79c024f3134a1414ea" }, "downloads": -1, "filename": "libmc-1.2.0.tar.gz", "has_sig": false, "md5_digest": "02c1a970aa3bb2c549675971fc3a108f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 58725, "upload_time": "2019-03-13T09:23:27", "url": "https://files.pythonhosted.org/packages/39/30/9ad6ff87b9a3cdaa8cf8b8107809d36e9a747e952e07e16d1b5b3a715f0a/libmc-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "2b05dd70ca91ff2909b5b2317fa47a9c", "sha256": "ec003b176385d419c79215969a0f508afe4f6ab260ad9019ca6af2da12c33fd4" }, "downloads": -1, "filename": "libmc-1.3.0.tar.gz", "has_sig": false, "md5_digest": "2b05dd70ca91ff2909b5b2317fa47a9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59945, "upload_time": "2019-08-10T04:32:01", "url": "https://files.pythonhosted.org/packages/a4/22/a603f38c0ba9cc561571fb19c6057ec3f4bb0c7395dd318e233410836769/libmc-1.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2b05dd70ca91ff2909b5b2317fa47a9c", "sha256": "ec003b176385d419c79215969a0f508afe4f6ab260ad9019ca6af2da12c33fd4" }, "downloads": -1, "filename": "libmc-1.3.0.tar.gz", "has_sig": false, "md5_digest": "2b05dd70ca91ff2909b5b2317fa47a9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59945, "upload_time": "2019-08-10T04:32:01", "url": "https://files.pythonhosted.org/packages/a4/22/a603f38c0ba9cc561571fb19c6057ec3f4bb0c7395dd318e233410836769/libmc-1.3.0.tar.gz" } ] }