{ "info": { "author": "Shohei Tanaka(@xcir)", "author_email": "kokoniimasu@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Topic :: Internet :: WWW/HTTP" ], "description": "==================\npython-varnishapi\n==================\n\n\n------------------------------------\nConnect to libvarnish api by ctypes\n------------------------------------\n\n:Author: Shohei Tanaka(@xcir)\n:Date: 2018-03-19\n:Version: 60.24\n:Support Varnish Version: 4.0.x, 4.1.x 5.0.x 5.1.x 5.2.x 6.0.x\n:Check Varnish Version: 5.2.1 6.0.x\n:Check Python Version: 2.7.x, 3.5.x\n:Manual section: 3\n\nFor Varnish3.0.x\n=================\nSee this link.\nhttps://github.com/xcir/python-varnishapi/tree/varnish30\n\nFor Golang\n=================\nSee this link.\nhttps://github.com/xcir/go-varnishapi\n\n\nInstallation\n============\nsudo python setup.py install\n\nVersioning\n============\n[varnish-version].[library-version]\n\n50.18 is v18 for Varnish5.0.x\n\nDESCRIPTION\n============\nConnect to libvarnish api by ctypes\n\n\nVSLUtil class\n---------------------------------------\n\nVSLUtil.tag2Var\n-------------------\n\nPrototype\n ::\n\n tag2Var(tag, data)\n\nParameter\n ::\n\n\n STRING tag\n STRING data\n\nReturn value\n ::\n\n DICT Var\n\n\nDescription\n ::\n\n Transcode spec and tagname to variable name and value\nExample\n ::\n\n util = VSLUtil()\n\n # output is {'val': ' example.net', 'key': 'resp.http.Host', 'vkey': 'resp'}\n print util.tag2Var('RespHeader','Host: example.net')\n\nVSLUtil.tag2VarName\n-------------------\n\nPrototype\n ::\n\n tag2VarName(tag, data)\n\nParameter\n ::\n\n\n STRING tag\n STRING data\n\nReturn value\n ::\n\n STRING Variable name\n\n\nDescription\n ::\n\n Transcode spec and tagname to variable name\nExample\n ::\n\n util = VSLUtil()\n\n # output is \"resp.http.Host\"\n print util.tag2VarName('RespHeader','Host: example.net')\n\n\nVarnishStat class\n---------------------------------------\n\nVarnishStat.__init__\n-----------------------\n\nPrototype\n ::\n\n VarnishStat(opt = '', sopath = 'libvarnishapi.so.1')\n\nParameter\n ::\n\n LIST arg [OPTION]\n STRING libvarnishapi path [OPTION]\n\nReturn value\n ::\n\n class object\n\n\nDescription\n ::\n\n initialize\nExample\n ::\n\n vsc = VarnishStat()\n\n #set arg\n vsc = VarnishStat(['-n', 'v2'])\n\nVarnishStat.Fini\n-----------------------\n\nPrototype\n ::\n\n Fini()\n\nParameter\n ::\n\n VOID\n\nReturn value\n ::\n\n VOID\n\n\nDescription\n ::\n\n finish\nExample\n ::\n\n vsc = VarnishStat()\n ...\n vsc.Fini()\n\n\nVarnishStat.getStats\n---------------------\n\nPrototype\n ::\n\n getStats()\n\nParameter\n ::\n\n\n VOID\n\nReturn value\n ::\n\n DICT stats\n\n\nDescription\n ::\n\n Get statistics counter\nExample\n ::\n\n vsc = varnishapi.VarnishStat()\n r= vsc.getStat();\n for k,v in r.iteritems():\n #output\n # MAIN.fetch_zero 0 Fetch zero len body\n # MAIN.vmods 1 Loaded VMODs\n # MAIN.sess_dropped 0 Sessions dropped for thread\n # LCK.ban.locks 1457831 Lock Operations\n #...\n print \"%40s %20s %s\" % (k,v['val'],v['desc'])\n\n\nVarnishLog class\n---------------------------------------\n\nThis class is legacy.(using VSM)\nI recommend using VarnishLogVUT.\n\nVarnishLog.__init__\n-----------------------\n\nPrototype\n ::\n\n VarnishLog(opt = '', sopath = 'libvarnishapi.so.1', dataDecode = 1)\n\nParameter\n ::\n\n LIST arg [OPTION]\n STRING libvarnishapi path [OPTION]\n INT Using decode at the callback [OPTION]\n\nReturn value\n ::\n\n class object\n\n\nDescription\n ::\n\n initialize\nExample\n ::\n\n vsl = VarnishLog()\n\n #set arg\n vsl = VarnishLog(['-n', 'v2'])\n\n\nVarnishLog.Fini\n-----------------------\n\nPrototype\n ::\n\n Fini()\n\nParameter\n ::\n\n VOID\n\nReturn value\n ::\n\n VOID\n\n\nDescription\n ::\n\n finish\nExample\n ::\n\n vsl = VarnishLog()\n ...\n vsl.Fini()\n\nVarnishLog.Dispatch\n-----------------------\n\nPrototype\n ::\n\n Dispatch(cb=None, priv=None, maxread=1, vxidcb=None, groupcb=None)\n\nParameter\n ::\n\n FUNC cb callback function per line\n OBJECT priv\n INT maxread Maximum number of reads, if have unread log in VSL.(0=infinity)\n FUNC vxidcb callback function per vxid(call per line, if group option set to raw)\n FUNC groupcb callback function per group(raw, vxid, request, session)\n\n\n===================== ======== ======== =========== ===========\ncallbacktype \\\\ group raw vxid request session\n===================== ======== ======== =========== ===========\ncb per line per line per line per line\nvxidcb per line per vxid per vxid per vxid\ngroupcb per line per vxid per request per session\n===================== ======== ======== =========== ===========\n\n\nReturn value\n ::\n\n INT\n\n\nDescription\n ::\n\n Dispatch callback function\n\nExample\n ::\n\n def cbline(vap, cbd, priv):\n print cbd\n def cbvxid(vap, priv):\n print \"VXID\"\n def cbgroup(vap, priv):\n print \"GROUP\"\n\n vsl = varnishapi.VarnishLog(['-g','request'])\n arg = {\n 'cb' : cbline,\n 'vxidcb' : cbvxid,\n 'groupcb' : cbgroup,\n 'maxread' : 0,\n }\n while 1:\n ret = vsl.Dispatch(**arg)\n if 0 == ret:\n time.sleep(0.5)\n vsl.Fini()\n #output\n #\n # {'level': 1L, 'data': u'req 32907 rxreq', 'length': 16L, 'transaction_type': 2, 'reason': 2, 'tag': 76L, 'vxid': 32908, 'vxid_parent': 0, 'type': 'c', 'isbin': 0L}\n # {'level': 1L, 'data': u'Start: 1509598791.285514 0.000000 0.000000', 'length': 43L, 'transaction_type': 2, 'reason': 2, 'tag': 80L, 'vxid': 32908, 'vxid_parent': 0, 'type': 'c', 'isbin': 0L}\n # {'level': 1L, 'data': u'Req: 1509598791.285514 0.000000 0.000000', 'length': 41L, 'transaction_type': 2, 'reason': 2, 'tag': 80L, 'vxid': 32908, 'vxid_parent': 0, 'type': 'c', 'isbin': 0L}\n # ...\n # {'level': 1L, 'data': u'', 'length': 1L, 'transaction_type': 2, 'reason': 2, 'tag': 77L, 'vxid': 32908, 'vxid_parent': 0, 'type': 'c', 'isbin': 0L}\n # VXID\n # {'level': 2L, 'data': u'bereq 32908 fetch', 'length': 18L, 'transaction_type': 3, 'reason': 6, 'tag': 76L, 'vxid': 32909, 'vxid_parent': 32908, 'type': 'b', 'isbin': 0L}\n # ...\n # {'level': 2L, 'data': u'165 0 165 160 298 458', 'length': 22L, 'transaction_type': 3, 'reason': 6, 'tag': 83L, 'vxid': 32909, 'vxid_parent': 32908, 'type': 'b', 'isbin': 0L}\n # {'level': 2L, 'data': u'', 'length': 1L, 'transaction_type': 3, 'reason': 6, 'tag': 77L, 'vxid': 32909, 'vxid_parent': 32908, 'type': 'b', 'isbin': 0L}\n # VXID\n # GROUP\n # {'level': 1L, 'data': u'req 65648 rxreq', 'length': 16L, 'transaction_type': 2, 'reason': 2, 'tag': 76L, 'vxid': 65649, 'vxid_parent': 0, 'type': 'c', 'isbin': 0L}\n # {'level': 1L, 'data': u'Start: 1509598842.452101 0.000000 0.000000', 'length': 43L, 'transaction_type': 2, 'reason': 2, 'tag': 80L, 'vxid': 65649, 'vxid_parent': 0, 'type': 'c', 'isbin': 0L}\n\n\n\nVarnishLog.VSL_tags / VSL_tags_rev\n-----------------------------------\n\nPrototype\n ::\n\n #This is list variable\n VSL_tags[tag index]\n #This is dictionary variable\n VSL_tags_rev[tag name]\n\nReturn value\n ::\n\n STRING tagname (VSL_tags)\n INT tagindex (VSL_tags_rev)\n\n\nDescription\n ::\n\n Transcode tag index to tag text, or reverse\n\nExample\n ::\n\n def cb(vap,cbd,priv):\n #output\n #...\n #VCL_call\n #VCL_return\n #...\n print vap.VSL_tags[cbd['tag']]\n\n vsl = varnishapi.VarnishLog(['-c'])\n while 1:\n ret = vsl.Dispatch(cb)\n if 0 == ret:\n time.sleep(0.5)\n vsl.Fini()\n\nVarnishLog.VSL_tagflags\n--------------------------------\n\nPrototype\n ::\n\n #This is list variable\n VSL_tagflags[tag index]\n\nReturn value\n ::\n\n INT tagflags\n\nDescription\n ::\n\n tag flags\n\nVarnishLog.VSLQ_grouping\n--------------------------------\n\nPrototype\n ::\n\n #This is list variable\n VSLQ_grouping[tag index]\n\nReturn value\n ::\n\n STRING VSLQ_grouping_name\n\nDescription\n ::\n\n VSL Query grouping name\n\n\nVarnishLogVUT class\n---------------------------------------\n\nSupport Varnish5.2.0~(LIBVARNISHAPI2.0~)\n\nVarnishLogVUT.__init__\n-----------------------\n\nPrototype\n ::\n\n VarnishLogVUT(opt = [], progname='VarnishVUTproc', sopath = 'libvarnishapi.so.1', dataDecode = 1)\n\nParameter\n ::\n\n LIST arg [OPTION]\n STRING progname\n STRING libvarnishapi path [OPTION]\n INT Using decode at the callback [OPTION]\n\nReturn value\n ::\n\n class object\n\n\nDescription\n ::\n\n initialize\nExample\n ::\n\n arg = {}\n arg[\"opt\"] = ['-g','session']\n vsl = VarnishLogVUT(**arg)\n\n\nVarnishLogVUT.Fini\n-----------------------\n\nPrototype\n ::\n\n Fini()\n\nParameter\n ::\n\n VOID\n\nReturn value\n ::\n\n VOID\n\n\nDescription\n ::\n\n VarnishLogVUT is using thread.\n Must call this function, if finish program.\n\nExample\n ::\n\n vsl = VarnishLogVUT()\n ...\n vsl.Fini()\n\nVarnishLogVUT.Dispatch\n-----------------------\n\nPrototype\n ::\n\n Dispatch(cb=None, priv=None, maxread=1, vxidcb=None, groupcb=None)\n\nParameter\n ::\n\n FUNC cb callback function per line\n OBJECT priv\n INT maxread Maximum number of reads, if have unread log in VSL.(0=infinity)\n FUNC vxidcb callback function per vxid(call per line, if group option set to raw)\n FUNC groupcb callback function per group(raw, vxid, request, session)\n\n\n===================== ======== ======== =========== ===========\ncallbacktype \\\\ group raw vxid request session\n===================== ======== ======== =========== ===========\ncb per line per line per line per line\nvxidcb per line per vxid per vxid per vxid\ngroupcb per line per vxid per request per session\n===================== ======== ======== =========== ===========\n\n\nReturn value\n ::\n\n INT\n\n\nDescription\n ::\n\n Dispatch callback function\n\nExample\n ::\n\n import signal\n import varnishapi\n import time\n def cbline(vap, cbd, priv):\n print cbd\n def cbvxid(vap, priv):\n print \"VXID\"\n def cbgroup(vap, priv):\n print \"GROUP\"\n\n arg = {\n 'opt': ['-g','request']\n }\n vsl = varnishapi.VarnishLogVUT(**arg)\n arg = {\n 'cb' : cbline,\n 'vxidcb' : cbvxid,\n 'groupcb' : cbgroup,\n 'maxread' : 0,\n }\n try:\n vsl.Dispatch(**arg)\n signal.pause()\n except KeyboardInterrupt:\n vsl.Fini()\n #output\n #\n # {'level': 1L, 'data': u'req 32907 rxreq', 'length': 16L, 'transaction_type': 2, 'reason': 2, 'tag': 76L, 'vxid': 32908, 'vxid_parent': 0, 'type': 'c', 'isbin': 0L}\n # {'level': 1L, 'data': u'Start: 1509598791.285514 0.000000 0.000000', 'length': 43L, 'transaction_type': 2, 'reason': 2, 'tag': 80L, 'vxid': 32908, 'vxid_parent': 0, 'type': 'c', 'isbin': 0L}\n # {'level': 1L, 'data': u'Req: 1509598791.285514 0.000000 0.000000', 'length': 41L, 'transaction_type': 2, 'reason': 2, 'tag': 80L, 'vxid': 32908, 'vxid_parent': 0, 'type': 'c', 'isbin': 0L}\n # ...\n # {'level': 1L, 'data': u'', 'length': 1L, 'transaction_type': 2, 'reason': 2, 'tag': 77L, 'vxid': 32908, 'vxid_parent': 0, 'type': 'c', 'isbin': 0L}\n # VXID\n # {'level': 2L, 'data': u'bereq 32908 fetch', 'length': 18L, 'transaction_type': 3, 'reason': 6, 'tag': 76L, 'vxid': 32909, 'vxid_parent': 32908, 'type': 'b', 'isbin': 0L}\n # ...\n # {'level': 2L, 'data': u'165 0 165 160 298 458', 'length': 22L, 'transaction_type': 3, 'reason': 6, 'tag': 83L, 'vxid': 32909, 'vxid_parent': 32908, 'type': 'b', 'isbin': 0L}\n # {'level': 2L, 'data': u'', 'length': 1L, 'transaction_type': 3, 'reason': 6, 'tag': 77L, 'vxid': 32909, 'vxid_parent': 32908, 'type': 'b', 'isbin': 0L}\n # VXID\n # GROUP\n # {'level': 1L, 'data': u'req 65648 rxreq', 'length': 16L, 'transaction_type': 2, 'reason': 2, 'tag': 76L, 'vxid': 65649, 'vxid_parent': 0, 'type': 'c', 'isbin': 0L}\n # {'level': 1L, 'data': u'Start: 1509598842.452101 0.000000 0.000000', 'length': 43L, 'transaction_type': 2, 'reason': 2, 'tag': 80L, 'vxid': 65649, 'vxid_parent': 0, 'type': 'c', 'isbin': 0L}\n\n\n\nVarnishLogVUT.VSL_tags / VSL_tags_rev\n-----------------------------------\n\nPrototype\n ::\n\n #This is list variable\n VSL_tags[tag index]\n #This is dictionary variable\n VSL_tags_rev[tag name]\n\nReturn value\n ::\n\n STRING tagname (VSL_tags)\n INT tagindex (VSL_tags_rev)\n\n\nDescription\n ::\n\n Transcode tag index to tag text, or reverse\n\nExample\n ::\n\n import signal\n import varnishapi\n import time\n def cbline(vap, cbd, priv):\n #output\n #...\n #VCL_call\n #VCL_return\n #...\n print vap.VSL_tags[cbd['tag']]\n\n arg = {\n 'opt': ['-c']\n }\n vsl = varnishapi.VarnishLogVUT(**arg)\n arg = {\n 'cb' : cbline,\n }\n try:\n vsl.Dispatch(**arg)\n signal.pause()\n except KeyboardInterrupt:\n vsl.Fini()\n\n\nVarnishLogVUT.VSL_tagflags\n--------------------------------\n\nPrototype\n ::\n\n #This is list variable\n VSL_tagflags[tag index]\n\nReturn value\n ::\n\n INT tagflags\n\nDescription\n ::\n\n tag flags\n\nVarnishLogVUT.VSLQ_grouping\n--------------------------------\n\nPrototype\n ::\n\n #This is list variable\n VSLQ_grouping[tag index]\n\nReturn value\n ::\n\n STRING VSLQ_grouping_name\n\nDescription\n ::\n\n VSL Query grouping name\n\n\nHISTORY\n===========\nVersion 60.24: Support VUT.(p-r #75 thanks ehocdet). Fix callback logic(vxid/groupcb). VarnishLog is deprecated, replace to VarnishLogVUT.\n\nVersion 52.23: Enhance perfomance. add some feature in dispatch(). add transaction_type in callbackdata(cbd)\n\nVersion 52.22: Fix VSC/varnishstat bug.(fix declare, add fini(I mis-deleted...) p-r #71,72 thanks ehocdet). Fix key varnishstat's decode for python3.\n\nVersion 52.21: Initial support Varnish5.2.x\n\nVersion 50.20: Improoved C binding.(p-r #67 thanks ema)\n\nVersion 50.19: Fix -c -b option issue.(issue #65 thanks ema)\n\nVersion 50.18: Support Varnish5.0 tags.\n\nVersion 40.17: Add VSL_TAG, VSL_DATA. Rename class from LIBVARNISHAPI13 to LIBVARNISHAPI.(p-r #56,57,58 thanks ehocdet)\n\nVersion 40.16: Change the decode error handler from \"strict\" to \"replace\".(p-r #51 thanks szymi-)\n\nVersion 40.15: Fix Crash.\n\nVersion 40.14: Fix decode issue.(via vsltrans p-r #25. thanks szymi-) Add dataDecode option in VarnishLog.__init__.\n\nVersion 40.13: No source change.\n\nVersion 40.12: Support pip.(p-r #39 thanks ziollek)\n\nVersion 0.11-varnish40: Initial support for Python3. Feedback is welcome.\n\nVersion 0.10-varnish40: Fix some error log did not output. (p-r #33 thanks ema)\n\nVersion 0.9-varnish40: Change VarnishLog.(VSL_tags|VSL_tagflags|VSLQ_grouping) from object to list. Add VarnishLog.VSL_tags_rev.\n\nVersion 0.8-varnish40: Fix Crash if log abandoned.\n\nVersion 0.7-varnish40: Support Varnish4.1 tags\n\nVersion 0.6-varnish40: Fix -n/-N option doesn't work in VarnishStat(issue #15 thanks athoune)\n\nVersion 0.5-varnish40: Add VSLUtil.tag2Var VarnishStat.Fini(p-r #10 thanks bryyyon)\n\nVersion 0.4-varnish40: Support change to Varnish4\n\nVersion 0.3-varnish30: Support VSM_ReOpen\n\nVersion 0.2-varnish30: Support VSL_Arg\n\nVersion 0.1-varnish30: First version\n\n\nCOPYRIGHT\n===========\n\npython-varnishapi\n\n* Copyright (c) 2015 Shohei Tanaka(@xcir)\n\nVarnish Cache\n\n* Copyright (c) 2006-2015 Varnish Software AS\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/xcir/python-varnishapi", "keywords": "varnish,varnishlog,varnishstat", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "varnishapi", "package_url": "https://pypi.org/project/varnishapi/", "platform": "any", "project_url": "https://pypi.org/project/varnishapi/", "project_urls": { "Homepage": "https://github.com/xcir/python-varnishapi" }, "release_url": "https://pypi.org/project/varnishapi/60.24/", "requires_dist": null, "requires_python": "", "summary": "Connect to libvarnish api by ctypes", "version": "60.24" }, "last_serial": 3682753, "releases": { "40.13": [ { "comment_text": "", "digests": { "md5": "ec650a12f0b78c307032856e265a5146", "sha256": "531db8f4b602fd5206bbbbc5bdbc11bca1e613ec413e576a17df6113249a08a0" }, "downloads": -1, "filename": "varnishapi-40.13.tar.gz", "has_sig": false, "md5_digest": "ec650a12f0b78c307032856e265a5146", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10450, "upload_time": "2016-06-15T08:45:43", "url": "https://files.pythonhosted.org/packages/38/1c/abd157c4f93d8ffb0e46fbedc5f51ee4b605e10a687c75bcb5b1e866c88a/varnishapi-40.13.tar.gz" } ], "40.14": [ { "comment_text": "", "digests": { "md5": "6e5837d2f871d4e8c12827935a0b2c90", "sha256": "447bcd443b82013d1e6a3b45e6dfae7a1397557f68f580ea73490a25b63c88fb" }, "downloads": -1, "filename": "varnishapi-40.14.tar.gz", "has_sig": false, "md5_digest": "6e5837d2f871d4e8c12827935a0b2c90", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10677, "upload_time": "2016-06-20T08:57:36", "url": "https://files.pythonhosted.org/packages/f8/62/3bb0bb8f7fefb6d828181b604b451706d00691eee305c70445ce440a4636/varnishapi-40.14.tar.gz" } ], "40.15": [ { "comment_text": "", "digests": { "md5": "69d0274460fe0b99b8b6c8e80a5063fd", "sha256": "f6bec0863f9ce8c47bdbf492b5718ce5a079db7e87eefeb64d961bb7cafdc87a" }, "downloads": -1, "filename": "varnishapi-40.15.tar.gz", "has_sig": false, "md5_digest": "69d0274460fe0b99b8b6c8e80a5063fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10693, "upload_time": "2016-06-21T06:52:12", "url": "https://files.pythonhosted.org/packages/e8/04/a4ea0d646fdd21dcda425c0e38f65445dfafe355c06f81c07e2619ab215d/varnishapi-40.15.tar.gz" } ], "40.16": [ { "comment_text": "", "digests": { "md5": "41774cc1c38c51254dd08930c0d4453e", "sha256": "a889cf1a139e10a24507dba376eeb6aa17803d160c9e4f36c5383f5cfb125f49" }, "downloads": -1, "filename": "varnishapi-40.16.tar.gz", "has_sig": false, "md5_digest": "41774cc1c38c51254dd08930c0d4453e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10768, "upload_time": "2016-06-28T04:47:40", "url": "https://files.pythonhosted.org/packages/99/ce/d458c9c73a9cef484e7458ba5f36c43cf90a0557faae7fbb7dffc859a70b/varnishapi-40.16.tar.gz" } ], "40.17": [ { "comment_text": "", "digests": { "md5": "078cbd68205c9e2087c13d84eeb2c8fd", "sha256": "e93e1e848f96b94ed2e8135ab9b2a2fe30ebd465def58815fdfbee64ae65c6ca" }, "downloads": -1, "filename": "varnishapi-40.17.tar.gz", "has_sig": false, "md5_digest": "078cbd68205c9e2087c13d84eeb2c8fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11639, "upload_time": "2016-09-13T16:10:59", "url": "https://files.pythonhosted.org/packages/c0/89/7aaef5c77bf9f418be775087039bea97db53eb1a906b950e2e6fabf3a3f3/varnishapi-40.17.tar.gz" } ], "50.18": [ { "comment_text": "", "digests": { "md5": "d2aa9d9d4c081fa966e9090f3490b60a", "sha256": "a588b03bc58804c1a372dea83644ee1e3ea9e7c008b613202fb371cad1673543" }, "downloads": -1, "filename": "varnishapi-50.18.tar.gz", "has_sig": false, "md5_digest": "d2aa9d9d4c081fa966e9090f3490b60a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11881, "upload_time": "2016-09-17T17:18:24", "url": "https://files.pythonhosted.org/packages/51/af/2fe07cb5f1f86dcacf30d75b6e7009d9b73d77a6ac660d3c7c5c513424d5/varnishapi-50.18.tar.gz" } ], "50.19": [ { "comment_text": "", "digests": { "md5": "7efac58e4add8373f90723590c140a7a", "sha256": "367cc0a6e2b26e0f3af6214977bce5fe4d9daa8e4e01838c006ba952fd72fabb" }, "downloads": -1, "filename": "varnishapi-50.19.tar.gz", "has_sig": false, "md5_digest": "7efac58e4add8373f90723590c140a7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11860, "upload_time": "2016-11-08T12:24:22", "url": "https://files.pythonhosted.org/packages/f5/62/7bfb10de7a453519154a895ad413d417d20c7e82fca4cf0a890d4ddeae00/varnishapi-50.19.tar.gz" } ], "50.20": [ { "comment_text": "", "digests": { "md5": "7d6761731ff8c5cfd10601a1663870fe", "sha256": "9f3f53926c1d53a796191064b56987f83bf8cbab3e21fc44d573f9ff88e0eee4" }, "downloads": -1, "filename": "varnishapi-50.20.tar.gz", "has_sig": false, "md5_digest": "7d6761731ff8c5cfd10601a1663870fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12806, "upload_time": "2016-11-26T16:18:16", "url": "https://files.pythonhosted.org/packages/80/de/bc4444ea19b7230a7ba1be9df7046a8badbcecbbe093e0107155a6b96f9d/varnishapi-50.20.tar.gz" } ], "52.21": [ { "comment_text": "", "digests": { "md5": "c15e0f82e3c181baf2545cd57d7c7fd6", "sha256": "185d1024c361083c260d75dcc95b6139ccb43db92723c1600742152f8ea5326d" }, "downloads": -1, "filename": "varnishapi-52.21.tar.gz", "has_sig": false, "md5_digest": "c15e0f82e3c181baf2545cd57d7c7fd6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15443, "upload_time": "2017-09-27T15:37:25", "url": "https://files.pythonhosted.org/packages/2e/0b/4c004c9c8b4fbeeb81bdca278addbca33026e3dd0c5e7a3bd67e1de8edb0/varnishapi-52.21.tar.gz" } ], "52.22": [ { "comment_text": "", "digests": { "md5": "92e053d1356489377ce357ca1500a3fd", "sha256": "8793c33917024eabb8e098ad852fa800257848a713bd916ce56f202c60ba6794" }, "downloads": -1, "filename": "varnishapi-52.22.tar.gz", "has_sig": false, "md5_digest": "92e053d1356489377ce357ca1500a3fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15607, "upload_time": "2017-10-21T18:02:33", "url": "https://files.pythonhosted.org/packages/3d/27/7f60106a8fffe3086b726169b6100b0fd45c8665a6a3cc702757ff7007d8/varnishapi-52.22.tar.gz" } ], "52.23": [ { "comment_text": "", "digests": { "md5": "cdcc3d4a5b08ca1e2ce3ad3fd648b9ec", "sha256": "b873dd5d2871994ff4da808265064dc7d4d76e22b04bbe2f3c9bd8687015930c" }, "downloads": -1, "filename": "varnishapi-52.23.tar.gz", "has_sig": false, "md5_digest": "cdcc3d4a5b08ca1e2ce3ad3fd648b9ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16858, "upload_time": "2017-11-08T08:38:19", "url": "https://files.pythonhosted.org/packages/e2/29/5a2e4d1803dcdc6834fb2d0b31029585575783139eeeab89a103eca153d6/varnishapi-52.23.tar.gz" } ], "60.24": [ { "comment_text": "", "digests": { "md5": "5bd0140a4cf170a87c71bb907788df0f", "sha256": "fd557310abe3d062a2a96144a668c30f343fc2fccf55f8cde3b0321d5daa13ca" }, "downloads": -1, "filename": "varnishapi-60.24-py3-none-any.whl", "has_sig": false, "md5_digest": "5bd0140a4cf170a87c71bb907788df0f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19073, "upload_time": "2018-03-19T05:49:26", "url": "https://files.pythonhosted.org/packages/04/51/59a791d2f1469c39b77e173292ad95a27a3aa581f9dc7d55f973b18eb100/varnishapi-60.24-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0f54f831231344d0f0f4807d7bb36d69", "sha256": "1b29629ae68d6658fdec36e45ecd94749b37a62db7ae529fe4614fd79489de4d" }, "downloads": -1, "filename": "varnishapi-60.24.tar.gz", "has_sig": false, "md5_digest": "0f54f831231344d0f0f4807d7bb36d69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18208, "upload_time": "2018-03-19T05:49:28", "url": "https://files.pythonhosted.org/packages/7a/6c/4f4428ee572598efe229dc4c5a2b79e4716a8244d2b6bb8be8361e7a7eb1/varnishapi-60.24.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5bd0140a4cf170a87c71bb907788df0f", "sha256": "fd557310abe3d062a2a96144a668c30f343fc2fccf55f8cde3b0321d5daa13ca" }, "downloads": -1, "filename": "varnishapi-60.24-py3-none-any.whl", "has_sig": false, "md5_digest": "5bd0140a4cf170a87c71bb907788df0f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19073, "upload_time": "2018-03-19T05:49:26", "url": "https://files.pythonhosted.org/packages/04/51/59a791d2f1469c39b77e173292ad95a27a3aa581f9dc7d55f973b18eb100/varnishapi-60.24-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0f54f831231344d0f0f4807d7bb36d69", "sha256": "1b29629ae68d6658fdec36e45ecd94749b37a62db7ae529fe4614fd79489de4d" }, "downloads": -1, "filename": "varnishapi-60.24.tar.gz", "has_sig": false, "md5_digest": "0f54f831231344d0f0f4807d7bb36d69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18208, "upload_time": "2018-03-19T05:49:28", "url": "https://files.pythonhosted.org/packages/7a/6c/4f4428ee572598efe229dc4c5a2b79e4716a8244d2b6bb8be8361e7a7eb1/varnishapi-60.24.tar.gz" } ] }