{ "info": { "author": "Jay Johnson", "author_email": "jay.p.h.johnson@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Spylunking - Splunk + Python Logging\n------------------------------------\n\nDrill down into your logs with an integrated, colorized logger and search tools set up with the included Splunk docker sandbox.\n\nThis repository creates Splunk-ready, colorized Python loggers that work with a Splunk TCP Port or the Splunk HEC REST API. Both of these endpoints are automatically set up for use with the included docker container. \n\n.. image:: https://imgur.com/SUdcyWf.png\n :alt: Splunk web app Python logs from the Spylunking test app\n\nSample Log Handlers\n===================\n\nDepending on your application's use case you can use one of the included Python logging handlers:\n\n- `TCP Splunk Publisher `__\n- `Threaded Splunk Publisher `__\n- `Multiprocessing Splunk Publisher `__\n\nThe log publishing and search tools support using existing Splunk tokens or logging in using the configured user and password arguments or from environment variables. \n\nSample Log Config JSON Files\n============================\n\nHere are the sample logging config JSON files:\n\n- `TCP Splunk Publisher Log Config `__\n- `Threaded Splunk Publisher Log Config `__\n- `Multiprocessing Splunk Publisher Log Config `__\n\n.. list-table::\n :header-rows: 1\n\n * - Travis Build\n - Read the Docs\n * - .. image:: https://travis-ci.org/jay-johnson/spylunking.svg?branch=master\n :alt: Travis Test Status\n :target: https://travis-ci.org/jay-johnson/spylunking\n - .. image:: https://readthedocs.org/projects/spylunking/badge/?version=latest\n :alt: Read the Docs Status\n :target: http://spylunking.readthedocs.io/en/latest/\n\nGetting Started\n===============\n\n#. Clone the repo\n\n ::\n\n git clone https://github.com/jay-johnson/spylunking.git spylunking\n cd spylunking\n\n#. Install the pip \n\n ::\n\n pip install spylunking\n\n If you want to develop use this command:\n\n ::\n\n pip install -e .\n\n#. Start the Splunk docker container\n\n ::\n\n ./run-splunk-in-docker.sh \n\nGet a Splunk User Token\n-----------------------\n\nBy default the container creates a user with the credentials:\n\nusername: **trex**\npassword: **123321**\n\n::\n\n get_splunk_token.py\n 955324da-742b-43d4-9746-bcbedf6ae7f4\n\nSet the Splunk Environment Variables\n\n::\n\n export SPLUNK_INDEX=antinex\n export SPLUNK_TOKEN=955324da-742b-43d4-9746-bcbedf6ae7f4\n\nPlease wait at least 30 seconds while the container is getting ready. You may see output like this when the ``splunk`` container is not ready yet or stops running:\n\n::\n\n get_splunk_token.py \n Traceback (most recent call last):\n File \"\", line 171, in _new_conn\n (self._dns_host, self.port), self.timeout, **extra_kw)\n File \"\", line 79, in create_connection\n raise err\n File \"\", line 69, in create_connection\n sock.connect(sa)\n ConnectionRefusedError: [Errno 111] Connection refused\n\nPublishing Logs to Splunk using the Spylunking Logger\n-----------------------------------------------------\n\nBelow is a video showing how to tag your application's logs using the ``LOG_NAME`` environment variable. Doing this allows you to quickly find them in Splunk using the included ``sp`` command line tool.\n\n.. image:: https://asciinema.org/a/189711.png\n :target: https://asciinema.org/a/189711?autoplay=1\n :alt: Publishing Logs to Splunk using the Spylunking Logger\n\nCommands from the video:\n\n#. Set an Application Log Name\n\n ::\n\n export LOG_NAME=payments\n\n#. Search for Logs in Splunk\n\n ::\n\n sp -q 'index=\"antinex\" AND name=payments | head 5 | reverse'\n No matches for search={\n \"search\": \"search index=\\\"antinex\\\" AND name=payments | head 5 | reverse\"\n } response={\n \"init_offset\": 0,\n \"messages\": [],\n \"post_process_count\": 0,\n \"preview\": false,\n \"results\": []\n }\n\n#. Send Test Logs to Splunk\n\n ::\n\n test_logging.py \n 2018-07-02 09:18:22,197 - helloworld - INFO - testing INFO message_id=93e33f10-ebbf-49a1-a87a-a76858448c71\n 2018-07-02 09:18:22,199 - helloworld - ERROR - testing ERROR message_id=3b3f0362-f146-47b4-9fff-c6cc3b165279\n 2018-07-02 09:18:22,200 - helloworld - CRITICAL - testing CRITICAL message_id=8870f39e-82b5-4071-b19a-80ce6cfefbd6\n 2018-07-02 09:18:22,201 - helloworld - WARNING - testing WARNING message_id=6ab745cb-8a14-41ae-b16e-13c0c80c4963\n 2018-07-02 09:18:22,201 - helloworld - ERROR - Testing EXCEPTION with ex=Throw for testing exceptions message_id=26b3c421-46b7-49d2-960b-1ca2ed7b8e03\n\n#. Search for Test Logs in Splunk\n\n ::\n\n sp -q 'index=\"antinex\" AND name=payments | head 5 | reverse'\n 2018-07-02 09:18:22,197 helloworld - INFO - testing INFO message_id=93e33f10-ebbf-49a1-a87a-a76858448c71 \n 2018-07-02 09:18:22,199 helloworld - ERROR - testing ERROR message_id=3b3f0362-f146-47b4-9fff-c6cc3b165279 \n 2018-07-02 09:18:22,200 helloworld - CRITICAL - testing CRITICAL message_id=8870f39e-82b5-4071-b19a-80ce6cfefbd6 \n 2018-07-02 09:18:22,201 helloworld - WARNING - testing WARNING message_id=6ab745cb-8a14-41ae-b16e-13c0c80c4963 \n 2018-07-02 09:18:22,201 helloworld - ERROR - Testing EXCEPTION with ex=Throw for testing exceptions message_id=26b3c421-46b7-49d2-960b-1ca2ed7b8e03 \n\nGet Splunk Logs from the Command Line Tool\n------------------------------------------\n\nUse the command line tool: **sp** to search for recent logs.\n\n#. Set environment variables:\n\n ::\n\n export SPLUNK_ADDRESS=\"splunkenterprise:8088\"\n export SPLUNK_API_ADDRESS=\"splunkenterprise:8089\"\n export SPLUNK_PASSWORD=\"123321\"\n export SPLUNK_USER=\"trex\"\n\n .. note:: The remainder of this guide was recorded by running the splunk container on a remote vm and then setting the environment variables for the search tool ``sp`` and the spylunking logger to work. If you are running the container locally, either add ``splunkenterprise`` to ``/etc/hosts`` at the end of the ``127.0.0.1`` line or export these environment variables to work with the local splunk container: ``export SPLUNK_ADDRESS:localhost:8088`` and ``export SPLUNK_API_ADDRESS=localhost:8089``.\n\n#. Run the tool:\n\n ::\n\n sp\n\n Which will log something like:\n\n ::\n\n sp - INFO - No matches for search={\n \"search\": \"search index=\\\"antinex\\\" | head 10\"\n }\n sp - INFO - done\n\nWrite Splunk Logs\n-----------------\n\nBy default, the container creates a Splunk index called: **antinex** with a user token for the user **trex** to search the index. Once the Splunk container is running, you can use the included **test_logging.py** script to create sample logs to verify the Splunk logging integration is working. The default logger will send logs over TCP using the `TCP Splunk Publisher `__. To change this, you can export the optional environment variable ``SHARED_LOG_CFG`` to the absolute path of another logging config JSON file like:\n\n::\n\n export SHARED_LOG_CFG=\n\nSend logs using the command: ``test_logging.py``\n\n::\n\n test_logging.py \n 2018-06-24 01:07:36,378 - testingsplunk - INFO - testing INFO message_id=ce9c91dc-3af9-484d-aeb0-fc09194bb42e\n 2018-06-24 01:07:36,379 - testingsplunk - ERROR - testing ERROR message_id=9227cc2f-f734-4b99-8448-117776ef6bff\n 2018-06-24 01:07:36,379 - testingsplunk - CRITICAL - testing CRITICAL message_id=7271a65d-d563-4231-b24a-b17364044818\n 2018-06-24 01:07:36,379 - testingsplunk - WARNING - testing WARN message_id=54063058-dba1-47ee-a0ab-d654b3140e55\n 2018-06-24 01:07:36,379 - testingsplunk - ERROR - Testing EXCEPTION with ex=Throw for testing exceptions message_id=c1e100f4-202d-48ac-9803-91c4f02c9a92\n\nGet the Test Splunk Logs using the Command Line Tool\n----------------------------------------------------\n\nThe command line tool called ``sp`` is included with the pip on install. When you run it, it will return the most recent logs from the index (``antinex`` by default) and print them to stdout.\n\n::\n\n sp\n\nIf you want to pull logs from splunk with user credentials (``SPLUNK_USER`` and ``SPLUNK_PASSWORD`` as environment variables works too):\n\n::\n\n sp -u trex -p 123321 -a splunkenterprise:8089\n\nRunning ``sp`` should return something like these test logs:\n\n::\n\n sp -u trex -p 123321 -a splunkenterprise:8089\n\n sp - ERROR - testingsplunk.testingsplunk 2018-06-24 01:07:36,379 - Testing EXCEPTION with ex=Throw for testing exceptions message_id=c1e100f4-202d-48ac-9803-91c4f02c9a92 dc= env= source=/opt/spylunking/spylunking/scripts/test_logging.py line=41 ex=None\n sp - CRITICAL - testingsplunk.testingsplunk 2018-06-24 01:07:36,379 - testing CRITICAL message_id=7271a65d-d563-4231-b24a-b17364044818 dc= env= source=/opt/spylunking/spylunking/scripts/test_logging.py line=31 ex=None\n sp - ERROR - testingsplunk.testingsplunk 2018-06-24 01:07:36,379 - testing ERROR message_id=9227cc2f-f734-4b99-8448-117776ef6bff dc= env= source=/opt/spylunking/spylunking/scripts/test_logging.py line=29 ex=None\n sp - INFO - testingsplunk.testingsplunk 2018-06-24 01:07:36,378 - testing INFO message_id=ce9c91dc-3af9-484d-aeb0-fc09194bb42e dc= env= source=/opt/spylunking/spylunking/scripts/test_logging.py line=27 ex=None\n sp - INFO - done\n\nExamples\n--------\n\nPull Logs with a Query on the Command Line\n==========================================\n\n::\n\n sp -q 'index=\"antinex\" AND levelname=INFO | head 10' \\\n -u trex -p 123321 -a splunkenterprise:8089\n sp - INFO - testingsplunk.testingsplunk 2018-06-24 01:40:18,313 - testing INFO message_id=74b8fe93-ce07-4b8f-a700-dcf4665416d3 dc= env= source=/opt/spylunking/spylunking/scripts/test_logging.py line=27 ex=None\n sp - INFO - testingsplunk.testingsplunk 2018-06-24 01:25:19,162 - testing INFO message_id=766e1408-1252-47e2-99db-e3154f5b915a dc= env= source=/opt/spylunking/spylunking/scripts/test_logging.py line=27 ex=None\n sp - INFO - testingsplunk.testingsplunk 2018-06-24 01:07:36,378 - testing INFO message_id=ce9c91dc-3af9-484d-aeb0-fc09194bb42e dc= env= source=/opt/spylunking/spylunking/scripts/test_logging.py line=27 ex=None\n sp - INFO - done\n\nPull Logs with a Query on the Command Line\n==========================================\n\nGet CRITICAL logs\n=================\n\n::\n\n sp -q 'index=\"antinex\" AND levelname=\"CRITICAL\"'\n\nGet First 10 ERROR logs\n=======================\n\n::\n\n sp -q 'index=\"antinex\" AND levelname=\"ERROR\" | head 10' \\\n -u trex -p 123321 -a splunkenterprise:8089\n\nRunning ``sp`` also works if you want to view the full json fields:\n\n::\n\n sp -j -u trex -p 123321 -a splunkenterprise:8089\n\n sp - ERROR - {\n \"asctime\": \"2018-06-24 01:07:36,379\",\n \"custom_key\": \"custom value\",\n \"exc\": null,\n \"filename\": \"test_logging.py\",\n \"levelname\": \"ERROR\",\n \"lineno\": 41,\n \"logger_name\": \"testingsplunk\",\n \"message\": \"Testing EXCEPTION with ex=Throw for testing exceptions message_id=c1e100f4-202d-48ac-9803-91c4f02c9a92\",\n \"name\": \"testingsplunk\",\n \"path\": \"/opt/spylunking/spylunking/scripts/test_logging.py\",\n \"tags\": [],\n \"timestamp\": 1529827656.3798487\n }\n sp - CRITICAL - {\n \"asctime\": \"2018-06-24 01:07:36,379\",\n \"custom_key\": \"custom value\",\n \"exc\": null,\n \"filename\": \"test_logging.py\",\n \"levelname\": \"CRITICAL\",\n \"lineno\": 31,\n \"logger_name\": \"testingsplunk\",\n \"message\": \"testing CRITICAL message_id=7271a65d-d563-4231-b24a-b17364044818\",\n \"name\": \"testingsplunk\",\n \"path\": \"/opt/spylunking/spylunking/scripts/test_logging.py\",\n \"tags\": [],\n \"timestamp\": 1529827656.3794894\n }\n sp - ERROR - {\n \"asctime\": \"2018-06-24 01:07:36,379\",\n \"custom_key\": \"custom value\",\n \"exc\": null,\n \"filename\": \"test_logging.py\",\n \"levelname\": \"ERROR\",\n \"lineno\": 29,\n \"logger_name\": \"testingsplunk\",\n \"message\": \"testing ERROR message_id=9227cc2f-f734-4b99-8448-117776ef6bff\",\n \"name\": \"testingsplunk\",\n \"path\": \"/opt/spylunking/spylunking/scripts/test_logging.py\",\n \"tags\": [],\n \"timestamp\": 1529827656.3792682\n }\n sp - INFO - {\n \"asctime\": \"2018-06-24 01:07:36,378\",\n \"custom_key\": \"custom value\",\n \"exc\": null,\n \"filename\": \"test_logging.py\",\n \"levelname\": \"INFO\",\n \"lineno\": 27,\n \"logger_name\": \"testingsplunk\",\n \"message\": \"testing INFO message_id=ce9c91dc-3af9-484d-aeb0-fc09194bb42e\",\n \"name\": \"testingsplunk\",\n \"path\": \"/opt/spylunking/spylunking/scripts/test_logging.py\",\n \"tags\": [],\n \"timestamp\": 1529827656.3789432\n }\n sp - INFO - done\n\nRunning Stats Commands like Counting Log Matches\n------------------------------------------------\n\nAfter running a few million logs through the Splunk container you can count the number of matches using ``sp``:\n\n::\n\n sp -q 'index=\"antinex\" | stats count'\n {\n \"count\": \"9261227\"\n }\n\nSplunk Client Load Testing\n--------------------------\n\nIf you are looking to tune your Splunk client logging performance, then please check out the `included load tester `__ to validate the deployed configuration will not fail to publish log messages (if that is required for your client).\n\nBefore using this in production, please note it is possible to overflow the current python queues during something like an extended Splunk maintenance window or if the client is publishing logs over an unreliable network connection. The default configuration is only going to queue up to 1 million log messages before starting to drop new logs. Another way to test this is if your application is writing logs faster than the Splunk REST API can keep up, then eventually it will overflow the queue's default depth. If you are concerned about not losing log messages, then the logger should set a `flush interval `__ of ``0`` to disable the asynchronous, threaded queue support. This will put the client logger into a blocking mode and ensure there are no missed log messages. Please consider that this change will only create blocking log publishers where the ``retry_count`` and ``timeout`` values should be tuned to your application's needs to prevent slow application performance while waiting on the client's HTTP requests to acknowledge each log was received.\n\nHere is how to start a single process load tester:\n\n::\n\n ./spylunking/scripts/start_logging_loader.py\n 2018-06-28 22:01:47,702 - load-test-2018_06_29_05_01_47 - INFO - INFO message_id=acdbfd0a-6349-4c2e-959c-f49572fc94ca\n 2018-06-28 22:01:47,702 - load-test-2018_06_29_05_01_47 - ERROR - ERROR message_id=7daf8a8e-0d8d-4aa8-9ed1-313cd5dfb421\n 2018-06-28 22:01:47,702 - load-test-2018_06_29_05_01_47 - CRITICAL - CRITICAL message_id=a27e7778-94be-4a35-9ce2-279403b7cf60\n 2018-06-28 22:01:47,703 - load-test-2018_06_29_05_01_47 - WARNING - WARN message_id=d4f39765-5812-4e2e-b7ce-857b231f79d4\n\nLogging to Splunk from a Python Shell\n-------------------------------------\n\nHere are python commands to build a colorized, splunk-ready python logger. On startup, the logger will authenticate with splunk using the provided credentials. Once authenticated you can use it like a normal logger.\n\n.. note:: The ``build_colorized_logger`` and ``search`` method also support authentication using a pre-existing ``splunk_token=`` or by setting a ``SPLUNK_TOKEN`` environment key\n\n.. code-block:: python\n\n python -c '\\\n import json;\\\n from spylunking.log.setup_logging import build_colorized_logger;\\\n import spylunking.search as sp;\\\n from spylunking.ppj import ppj;\\\n print(\"build the logger\");\\\n log = build_colorized_logger(\\\n name=\"spylunking-in-a-shell\",\\\n splunk_user=\"trex\", \\\n splunk_password=\"123321\");\\\n print(\"import the search wrapper\");\\\n res = sp.search(\\\n user=\"trex\",\\\n password=\"123321\",\\\n address=\"splunkenterprise:8089\",\\\n query_dict={\\\n \"search\": \"search index=\\\"antinex\\\" | head 1\"\\\n });\\\n print(\"pretty print the first record in the result list\");\\\n log.critical(\"found search results={}\".format(ppj(json.loads(res[\"record\"][\"results\"][0][\"_raw\"]))))'\n\nHere is sample output from running this command:\n\n::\n\n build the logger\n import the search wrapper\n pretty print the first record in the result list\n 2018-06-21 22:38:38,475 - spylunking-in-a-shell - CRITICAL - found search results={\n \"asctime\": \"2018-06-21 22:13:36,279\",\n \"custom_key\": \"custom value\",\n \"exc\": null,\n \"filename\": \"\",\n \"levelname\": \"INFO\",\n \"lineno\": 1,\n \"logger_name\": \"spylunking-in-a-shell\",\n \"message\": \"testing from a python shell\",\n \"name\": \"spylunking-in-a-shell\",\n \"path\": \"\",\n \"tags\": [],\n \"timestamp\": 1529644416.2790444\n }\n\nHere it is from a python shell:\n\n::\n\n python\n Python 3.6.5 (default, Apr 1 2018, 05:46:30) \n [GCC 7.3.0] on linux\n Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n >>> from spylunking.log.setup_logging import build_colorized_logger\n >>> log = build_colorized_logger(\n name='spylunking-in-a-shell',\n splunk_user='trex',\n splunk_password='123321')\n >>> import spylunking.search as sp\n >>> res = sp.search(\n user='trex',\n password='123321',\n address=\"splunkenterprise:8089\",\n query_dict={\n 'search': 'search index=\"antinex\" | head 1'\n })\n >>> from spylunking.ppj import ppj\n >>> log.critical('found search results={}'.format(ppj(json.loads(res['record']['results'][0]['_raw']))))\n 2018-06-21 22:31:04,231 - spylunking-in-a-shell - CRITICAL - found search results={\n \"asctime\": \"2018-06-21 22:13:36,279\",\n \"custom_key\": \"custom value\",\n \"exc\": null,\n \"filename\": \"\",\n \"levelname\": \"INFO\",\n \"lineno\": 1,\n \"logger_name\": \"spylunking-in-a-shell\",\n \"message\": \"testing from a python shell\",\n \"name\": \"spylunking-in-a-shell\",\n \"path\": \"\",\n \"tags\": [],\n \"timestamp\": 1529644416.2790444\n }\n\nPublishing Logs to a Remote Splunk Server\n-----------------------------------------\n\nSet up the environment variables:\n\n::\n\n export SPLUNK_API_ADDRESS=\"splunkenterprise:8089\"\n export SPLUNK_ADDRESS=\"splunkenterprise:8088\"\n export SPLUNK_USER=\"trex\"\n export SPLUNK_PASSWORD=\"123321\"\n\nRun the test tool to verify logs are published:\n\n::\n\n test_logging.py \n 2018-06-24 01:07:36,378 - testingsplunk - INFO - testing INFO message_id=ce9c91dc-3af9-484d-aeb0-fc09194bb42e\n 2018-06-24 01:07:36,379 - testingsplunk - ERROR - testing ERROR message_id=9227cc2f-f734-4b99-8448-117776ef6bff\n 2018-06-24 01:07:36,379 - testingsplunk - CRITICAL - testing CRITICAL message_id=7271a65d-d563-4231-b24a-b17364044818\n 2018-06-24 01:07:36,379 - testingsplunk - WARNING - testing WARN message_id=54063058-dba1-47ee-a0ab-d654b3140e55\n 2018-06-24 01:07:36,379 - testingsplunk - ERROR - Testing EXCEPTION with ex=Throw for testing exceptions message_id=c1e100f4-202d-48ac-9803-91c4f02c9a92\n\nGet the logs with ``sp``\n\n::\n\n sp -a splunkenterprise:8089\n\nWhich should return the newly published logs:\n\n::\n\n sp - ERROR - testingsplunk.testingsplunk 2018-06-24 01:07:36,379 - Testing EXCEPTION with ex=Throw for testing exceptions message_id=c1e100f4-202d-48ac-9803-91c4f02c9a92 dc= env= source=/opt/spylunking/spylunking/scripts/test_logging.py line=41 ex=None\n sp - CRITICAL - testingsplunk.testingsplunk 2018-06-24 01:07:36,379 - testing CRITICAL message_id=7271a65d-d563-4231-b24a-b17364044818 dc= env= source=/opt/spylunking/spylunking/scripts/test_logging.py line=31 ex=None\n sp - ERROR - testingsplunk.testingsplunk 2018-06-24 01:07:36,379 - testing ERROR message_id=9227cc2f-f734-4b99-8448-117776ef6bff dc= env= source=/opt/spylunking/spylunking/scripts/test_logging.py line=29 ex=None\n sp - INFO - testingsplunk.testingsplunk 2018-06-24 01:07:36,378 - testing INFO message_id=ce9c91dc-3af9-484d-aeb0-fc09194bb42e dc= env= source=/opt/spylunking/spylunking/scripts/test_logging.py line=27 ex=None\n sp - INFO - done\n\nSet up a Logger\n---------------\n\nThere are multiple loggers avaiable depending on the type of logger that is needed.\n\nSimple Logger\n-------------\n\nBuild a simple, no dates colorized logger that prints just the message in colors and does not publish logs to Splunk using:\n\n.. code-block:: python\n\n from spylunking.log.setup_logging import simple_logger\n log = simple_logger()\n log.info('simple logger example')\n simple logger example\n\nNo Date Colorized Logger\n------------------------\n\nBuild a colorized logger that preserves the parent application name and log level without a date field and does not publish logs to Splunk using:\n\n.. code-block:: python\n\n from spylunking.log.setup_logging import no_date_colors_logger\n log = no_date_colors_logger(name='app-name')\n log.info('no date with colors logger example')\n app-name - INFO - no date with colors logger example\n\nTest Logger\n-----------\n\nThe test logger is for unittests and does not publish to Splunk.\n\n.. code-block:: python\n\n from spylunking.log.setup_logging import test_logger\n log = test_logger(name='unittest logger')\n log.info('unittest log line')\n 2018-06-25 16:01:50,118 - using-a-colorized-logger - INFO - colorized logger example\n\nConsole Logger\n--------------\n\nThe console logger is the same as the ``build_colorized_logger`` which can be created with authenticated Splunk-ready logging using:\n\n.. code-block:: python\n\n from spylunking.log.setup_logging import build_colorized_logger\n log = build_colorized_logger(name='using-a-colorized-logger')\n log.info('colorized logger example')\n 2018-06-25 16:47:54,053 - unittest logger - INFO - unittest log line\n\nDefine Custom Fields for Splunk\n-------------------------------\n\nYou can export a custom JSON dictionary to send as JSON fields for helping drill down on log lines using this environment variable.\n\n::\n\n export LOG_FIELDS_DICT='{\"name\":\"hello-world\",\"dc\":\"k8-splunk\",\"env\":\"development\"}'\n\nOr you can export the following environment variables if you just want a couple set in the logs:\n\n::\n\n export LOG_NAME=\n export DEPLOY_CONFIG=\n export ENV_NAME\n\nLog some new test messages to Splunk:\n\n::\n\n test_logging.py \n 2018-06-25 20:48:51,367 - testingsplunk - INFO - testing INFO message_id=0c5e2a2c-9553-4c8a-8fff-8d77de2be78a\n 2018-06-25 20:48:51,368 - testingsplunk - ERROR - testing ERROR message_id=0dc1086d-4fe4-4062-9882-e822f9256d6f\n 2018-06-25 20:48:51,368 - testingsplunk - CRITICAL - testing CRITICAL message_id=0c0f56f2-e87f-41a0-babb-b71e2b9d5d5a\n 2018-06-25 20:48:51,368 - testingsplunk - WARNING - testing WARN message_id=59b099eb-8c0d-40d0-9d3a-7dfa13fefc90\n 2018-06-25 20:48:51,368 - testingsplunk - ERROR - Testing EXCEPTION with ex=Throw for testing exceptions message_id=70fc422d-d33b-4a9e-bb51-ed86aa0a02f9\n\nOnce published, you can search for these new logs using those new JSON fields with the ``sp`` search tool. Here is an example of searching for the logs with the application log name ``hello-world``:\n\n::\n\n sp -q 'index=\"antinex\" AND name=hello-world'\n 2018-06-25 20:48:51,368 testingsplunk - ERROR - Testing EXCEPTION with ex=Throw for testing exceptions message_id=70fc422d-d33b-4a9e-bb51-ed86aa0a02f9 \n 2018-06-25 20:48:51,368 testingsplunk - CRITICAL - testing CRITICAL message_id=0c0f56f2-e87f-41a0-babb-b71e2b9d5d5a \n 2018-06-25 20:48:51,368 testingsplunk - ERROR - testing ERROR message_id=0dc1086d-4fe4-4062-9882-e822f9256d6f \n 2018-06-25 20:48:51,367 testingsplunk - INFO - testing INFO message_id=0c5e2a2c-9553-4c8a-8fff-8d77de2be78a \n done\n\nAnd you can view log the full JSON dictionaries using the ``-j`` argument on the ``sp`` command:\n\n::\n\n sp -q 'index=\"antinex\" AND name=hello-world' -j\n {\n \"asctime\": \"2018-06-25 20:48:51,368\",\n \"custom_key\": \"custom value\",\n \"dc\": \"k8-deploy\",\n \"env\": \"development\",\n \"exc\": null,\n \"filename\": \"test_logging.py\",\n \"levelname\": \"ERROR\",\n \"lineno\": 41,\n \"logger_name\": \"testingsplunk\",\n \"message\": \"Testing EXCEPTION with ex=Throw for testing exceptions message_id=70fc422d-d33b-4a9e-bb51-ed86aa0a02f9\",\n \"name\": \"hello-world\",\n \"path\": \"/opt/spylunking/spylunking/scripts/test_logging.py\",\n \"tags\": [],\n \"timestamp\": 1529984931.3688767\n }\n {\n \"asctime\": \"2018-06-25 20:48:51,368\",\n \"custom_key\": \"custom value\",\n \"dc\": \"k8-deploy\",\n \"env\": \"development\",\n \"exc\": null,\n \"filename\": \"test_logging.py\",\n \"levelname\": \"CRITICAL\",\n \"lineno\": 31,\n \"logger_name\": \"testingsplunk\",\n \"message\": \"testing CRITICAL message_id=0c0f56f2-e87f-41a0-babb-b71e2b9d5d5a\",\n \"name\": \"hello-world\",\n \"path\": \"/opt/spylunking/spylunking/scripts/test_logging.py\",\n \"tags\": [],\n \"timestamp\": 1529984931.3684626\n }\n {\n \"asctime\": \"2018-06-25 20:48:51,368\",\n \"custom_key\": \"custom value\",\n \"dc\": \"k8-deploy\",\n \"env\": \"development\",\n \"exc\": null,\n \"filename\": \"test_logging.py\",\n \"levelname\": \"ERROR\",\n \"lineno\": 29,\n \"logger_name\": \"testingsplunk\",\n \"message\": \"testing ERROR message_id=0dc1086d-4fe4-4062-9882-e822f9256d6f\",\n \"name\": \"hello-world\",\n \"path\": \"/opt/spylunking/spylunking/scripts/test_logging.py\",\n \"tags\": [],\n \"timestamp\": 1529984931.3682773\n }\n {\n \"asctime\": \"2018-06-25 20:48:51,367\",\n \"custom_key\": \"custom value\",\n \"dc\": \"k8-deploy\",\n \"env\": \"development\",\n \"exc\": null,\n \"filename\": \"test_logging.py\",\n \"levelname\": \"INFO\",\n \"lineno\": 27,\n \"logger_name\": \"testingsplunk\",\n \"message\": \"testing INFO message_id=0c5e2a2c-9553-4c8a-8fff-8d77de2be78a\",\n \"name\": \"hello-world\",\n \"path\": \"/opt/spylunking/spylunking/scripts/test_logging.py\",\n \"tags\": [],\n \"timestamp\": 1529984931.3679354\n }\n done\n\nAvailable Environment Variables\n-------------------------------\n\nDrill down fields\n=================\n\nSplunk drill down fields with environment variables:\n\n::\n\n export LOG_NAME=\"\"\n export DEPLOY_CONFIG=\"\"\n export ENV_NAME=\"\"\n\nCommon Environment Variables\n============================\n\n::\n\n export SPLUNK_USER=\"\"\n export SPLUNK_PASSWORD=\"\"\n export SPLUNK_HOST=\"\"\n export SPLUNK_PORT=\"\"\n export SPLUNK_API_PORT=\"\"\n export SPLUNK_ADDRESS=\"\"\n export SPLUNK_API_ADDRESS=\"\"\n export SPLUNK_TOKEN=\"\"\n export SPLUNK_INDEX=\"\"\n export SPLUNK_SOURCE=\"\"\n export SPLUNK_SOURCETYPE=\"\"\n export SPLUNK_VERIFY=\"\"\n export SPLUNK_TIMEOUT=\"\"\n export SPLUNK_QUEUE_SIZE=\"\"\n export SPLUNK_SLEEP_INTERVAL=\"\"\n export SPLUNK_RETRY_COUNT=\"\"\n export SPLUNK_RETRY_BACKOFF=\"\"\n export SPLUNK_DEBUG=\"\"\n export SPLUNK_VERBOSE=\"\"\n\nDebug the Publishers\n====================\n\nExport this variable before creating a logger to see the publisher logs:\n\n::\n\n export SPLUNK_DEBUG=1\n\nLogin to Splunk from a Browser\n------------------------------\n\nOpen this url in a browser to view the **splunk** container's web application:\n\nhttp://127.0.0.1:8000\n\nLogin with the credentials:\n\nusername: **trex**\npassword: **123321**\n\nTroubleshooting\n---------------\n\nSplunk Handler Dropping Logs\n============================\n\nIf the splunk handler is dropping log messages you can use these values to tune the handler's worker thread:\n\n::\n\n export SPLUNK_RETRY_COUNT=\"\"\n export SPLUNK_TIMEOUT=\"\"\n export SPLUNK_QUEUE_SIZE=\"\"\n export SPLUNK_SLEEP_INTERVAL=\"\"\n export SPLUNK_DEBUG=\"\"\n\nTesting in a Python Shell\n=========================\n\nHere is a debugging python shell session for showing some common errors you can expect to see as you start to play around with ``spylunking``.\n\n::\n\n python\n Python 3.6.5 (default, Apr 1 2018, 05:46:30)\n [GCC 7.3.0] on linux\n Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n >>> from spylunking.log.setup_logging import build_colorized_logger\n >>> log = build_colorized_logger(\n name='spylunking-in-a-shell',\n splunk_user='trex',\n splunk_password='123321')\n >>> log.info(\"testing from a python shell\")\n 2018-06-21 22:13:36,279 - spylunking-in-a-shell - INFO - testing from a python shell\n >>> import spylunking.search as sp\n >>> res = sp.search(\n user='trex',\n password='123321',\n query_dict={\n 'search': 'index=\"antinex\" | head 1'\n },\n verify=False)\n >>> log.info('job status={}'.format(res['status']))\n 2018-06-21 22:16:22,158 - spylunking-in-a-shell - INFO - job status=2\n >>> log.info('job err={}'.format(res['err']))\n 2018-06-21 22:16:28,945 - spylunking-in-a-shell - INFO - job err=Failed to get splunk token for user=trex url=https://None ex=HTTPSConnectionPool(host='none', port=443): Max retries exceeded with url: /services/auth/login (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',))\n >>> print(\"now search with the url set\")\n now search with the url set\n >>> res = sp.search(\n user='trex',\n password='123321',\n query_dict={\n 'search': 'index=\"antinex\" | head 1'\n },\n address=\"splunkenterprise:8089\")\n 2018-06-21 22:18:15,380 - spylunking.search - ERROR - Failed searching splunk response=\n \n \n Search Factory: Unknown search command 'index'.\n \n \n for query={\n \"search\": \"index=\\\"antinex\\\" | head 1\"\n } url=https://splunkenterprise:8089/services/search/jobs ex=list index out of range\n >>> print(\"now nest the search correctly\")\n now nest the search correctly\n >>> res = sp.search(\n user='trex',\n password='123321',\n address=\"splunkenterprise:8089\",\n query_dict={\n 'search': 'search index=\"antinex\" | head 1'\n })\n >>> log.info('job status={}'.format(res['status']))\n 2018-06-21 22:20:10,142 - spylunking-in-a-shell - INFO - job status=0\n >>> log.info('job err={}'.format(res['err']))\n 2018-06-21 22:20:14,667 - spylunking-in-a-shell - INFO - job err=\n >>> from spylunking.ppj import ppj\n >>> log.critical('found search results={}'.format(ppj(res['record'])))\n 2018-06-21 22:21:25,977 - spylunking-in-a-shell - CRITICAL - found search results={\n \"fields\": [\n {\n \"name\": \"_bkt\"\n },\n {\n \"name\": \"_cd\"\n },\n {\n \"name\": \"_indextime\"\n },\n {\n \"name\": \"_raw\"\n },\n {\n \"name\": \"_serial\"\n },\n {\n \"name\": \"_si\"\n },\n {\n \"name\": \"_sourcetype\"\n },\n {\n \"name\": \"_subsecond\"\n },\n {\n \"name\": \"_time\"\n },\n {\n \"name\": \"host\"\n },\n {\n \"name\": \"index\"\n },\n {\n \"name\": \"linecount\"\n },\n {\n \"name\": \"source\"\n },\n {\n \"name\": \"sourcetype\"\n },\n {\n \"name\": \"splunk_server\"\n }\n ],\n \"highlighted\": {},\n \"init_offset\": 0,\n \"messages\": [],\n \"preview\": false,\n \"results\": [\n {\n \"_bkt\": \"antinex~0~791398E7-6A0B-4640-B8D5-5D25E7EF3D02\",\n \"_cd\": \"0:3\",\n \"_indextime\": \"1529644419\",\n \"_raw\": \"{\\\"asctime\\\": \\\"2018-06-21 22:13:36,279\\\", \\\"name\\\": \\\"spylunking-in-a-shell\\\", \\\"levelname\\\": \\\"INFO\\\", \\\"message\\\": \\\"testing from a python shell\\\", \\\"filename\\\": \\\"\\\", \\\"lineno\\\": 1, \\\"timestamp\\\": 1529644416.2790444, \\\"path\\\": \\\"\\\", \\\"custom_key\\\": \\\"custom value\\\", \\\"tags\\\": [], \\\"exc\\\": null, \\\"logger_name\\\": \\\"spylunking-in-a-shell\\\"}\",\n \"_serial\": \"0\",\n \"_si\": [\n \"splunkenterprise\",\n \"antinex\"\n ],\n \"_sourcetype\": \"json\",\n \"_subsecond\": \".2792356\",\n \"_time\": \"2018-06-22T05:13:36.279+00:00\",\n \"host\": \"dev\",\n \"index\": \"antinex\",\n \"linecount\": \"1\",\n \"source\": \"\",\n \"sourcetype\": \"json\",\n \"splunk_server\": \"splunkenterprise\"\n }\n ]\n }\n >>> exit()\n\nPlease refer to the command line tool's updated usage prompt for help searching for logs:\n\n::\n\n usage: sp [-h] [-u USER] [-p PASSWORD] [-f DATAFILE] [-i INDEX_NAME]\n [-a ADDRESS] [-e EARLIEST_TIME_MINUTES] [-l LATEST_TIME_MINUTES]\n [-q [QUERY_ARGS [QUERY_ARGS ...]]] [-j] [-m] [-v] [-b]\n\n Search Splunk\n\n optional arguments:\n -h, --help show this help message and exit\n -u USER username\n -p PASSWORD user password\n -f DATAFILE splunk-ready request in a json file\n -i INDEX_NAME index to search\n -a ADDRESS host address: \n -e EARLIEST_TIME_MINUTES\n (Optional) earliest_time minutes back\n -l LATEST_TIME_MINUTES\n (Optional) latest_time minutes back\n -q [QUERY_ARGS [QUERY_ARGS ...]], --queryargs [QUERY_ARGS [QUERY_ARGS ...]]\n query string for searching splunk: search\n index=\"antinex\" AND levelname=\"ERROR\"\n -j (Optional) view as json dictionary logs\n -m (Optional) verbose message when getting logs\n -v (Optional) verify certs - disabled by default\n -b verbose\n\nFor trying the host-only compose file, you may see errors like:\n\n``unable to resolve host splunkenterprise``\n\nPlease add ``splunkenterprise`` to the end of the line for ``127.0.0.1`` in your ``/etc/hosts``\n\nCleanup\n-------\n\nRemove the docker container with the commands:\n\n::\n\n docker stop splunk\n docker rm splunk\n\n\nManual Splunk Commands\n======================\n\nCreate Token\n\n::\n\n curl -k -u admin:changeme https://splunkenterprise:8089/servicesNS/admin/splunk_httpinput/data/inputs/http -d name=antinex-token \n\nList Token\n\n::\n\n curl -k -u admin:changeme https://splunkenterprise:8089/servicesNS/admin/splunk_httpinput/data/inputs/http\n\nUsing Splunk CLI\n================\n\nList Tokens\n\n::\n\n ./bin/splunk http-event-collector list -uri 'https://splunkenterprise:8089' -auth 'admin:changeme'\n\nAdd Index\n\n::\n\n ./bin/splunk add index antinex -auth 'admin:changeme'\n\nCreate Token\n\n::\n\n ./bin/splunk \\\n http-event-collector create \\\n antinex-token 'antinex logging token' \\\n -index antinex \\\n -uri 'https://splunkenterprise:8089' \\\n -auth 'admin:changeme'\n\nDevelopment\n-----------\n\nSetting up your development environment (right now this demo is using virtualenv):\n\n::\n\n virtualenv -p python3 ~/.venvs/spylunk && source ~/.venvs/spylunk/bin/activate && pip install -e .\n\nTesting\n-------\n\nRun all\n\n::\n\n py.test\n\nLinting\n-------\n\nflake8 .\n\npycodestyle .\n\nLicense\n-------\n\nApache 2.0 - Please refer to the LICENSE_ for more details\n\n.. _License: https://github.com/jay-johnson/spylunking/blob/master/LICENSE\n\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/jay-johnson/spylunking", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "spylunking", "package_url": "https://pypi.org/project/spylunking/", "platform": "", "project_url": "https://pypi.org/project/spylunking/", "project_urls": { "Homepage": "https://github.com/jay-johnson/spylunking" }, "release_url": "https://pypi.org/project/spylunking/1.2.9/", "requires_dist": [ "colorlog", "coverage", "flake8 (<=3.4.1)", "pep8 (>=1.7.1)", "pipenv", "pycodestyle (<=2.3.1)", "pylint", "python-json-logger", "pytest", "recommonmark", "requests", "sphinx", "sphinx-autobuild", "sphinx-rtd-theme", "tox", "unittest2", "mock" ], "requires_python": "", "summary": "Spylunking - Drill down into your logs with an integrated, colorized logger with search tools. Includes a Splunk sandbox running in docker.", "version": "1.2.9" }, "last_serial": 4745615, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "caacdf2e61f14d20b783902c4911ef83", "sha256": "81cc6da83e8b89d5791ca3a6f4d627a0b04bbfe7b8b47868f747749e9b6be36c" }, "downloads": -1, "filename": "spylunking-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "caacdf2e61f14d20b783902c4911ef83", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 34948, "upload_time": "2018-06-22T00:13:03", "url": "https://files.pythonhosted.org/packages/27/fb/16a734aaaa49eb12371ae371c19e9da87197aaa71987a556a4104e872044/spylunking-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d51778a00ac318e743c25642c35a8cba", "sha256": "4fffc310aa5e9ce2a623434428efddfaf9058ff9e6eed29b0c818c8700bd9f50" }, "downloads": -1, "filename": "spylunking-1.0.0.tar.gz", "has_sig": false, "md5_digest": "d51778a00ac318e743c25642c35a8cba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13484, "upload_time": "2018-06-22T00:13:01", "url": "https://files.pythonhosted.org/packages/17/a3/4fa9dbe03d9ab9e6fab5bffd32f9646309b380961481e3416d00e9e2d68a/spylunking-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "58687a220bc4a0bbd8665b660efb6b3c", "sha256": "dee61d03cfde0711a1e2745a5599430d271265bc89c092369e2567166ca19deb" }, "downloads": -1, "filename": "spylunking-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "58687a220bc4a0bbd8665b660efb6b3c", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 34804, "upload_time": "2018-06-22T00:19:30", "url": "https://files.pythonhosted.org/packages/dc/99/287faf23fd2e1367a28ce0ef3b72a0314b321c8042126ba3740081be40bd/spylunking-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a6b3677a354ffb619516cd0c18f96cdb", "sha256": "0d7db327536b1f5a9e79bf12ce77de0901fa836fe30a936b9a2219800f910ecb" }, "downloads": -1, "filename": "spylunking-1.0.1.tar.gz", "has_sig": false, "md5_digest": "a6b3677a354ffb619516cd0c18f96cdb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13509, "upload_time": "2018-06-22T00:19:29", "url": "https://files.pythonhosted.org/packages/a9/52/04bb2a4d7910ee5d086412b1f5e4a308536c1d21eb8fd8f98a97e216e2ac/spylunking-1.0.1.tar.gz" } ], "1.0.10": [ { "comment_text": "", "digests": { "md5": "8f6e4535b8670808b983040dce915970", "sha256": "b413019e68cad25f27e369b908646a9b554bd3abc41dbaadc5bdfe089ec4a48a" }, "downloads": -1, "filename": "spylunking-1.0.10-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8f6e4535b8670808b983040dce915970", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 42304, "upload_time": "2018-06-23T07:39:45", "url": "https://files.pythonhosted.org/packages/a1/1e/1dbc9da2ed02ab36114626dfbd852537e080cd2bb36e4954d26aff6a359c/spylunking-1.0.10-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d686055393d63e6114b4cb0f0794f4ee", "sha256": "70e90f7155a77cbeed31cf86fb6d1f0e9fdec5abfa772449b6b3f11c46820a74" }, "downloads": -1, "filename": "spylunking-1.0.10.tar.gz", "has_sig": false, "md5_digest": "d686055393d63e6114b4cb0f0794f4ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15574, "upload_time": "2018-06-23T07:39:44", "url": "https://files.pythonhosted.org/packages/2d/bb/01488944c00f4ef4f3f6306380f26008bb0802ed7b36a2cf8328bbd785a0/spylunking-1.0.10.tar.gz" } ], "1.0.11": [ { "comment_text": "", "digests": { "md5": "052c72e00e5e2f7246c54ae180a77f4c", "sha256": "22c221722b906dd1538fbd8e7c12df030b459ec1af99316b3d2abc86c778893e" }, "downloads": -1, "filename": "spylunking-1.0.11-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "052c72e00e5e2f7246c54ae180a77f4c", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 45833, "upload_time": "2018-06-23T21:23:38", "url": "https://files.pythonhosted.org/packages/94/26/dc5951ed0e784252341b7e5b1bf653c43ea5ef15da4f12b4c1210be196c2/spylunking-1.0.11-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "704117fc293f79d5e1259ea9c6b5f5f1", "sha256": "918e1f3f50dd20646e894c8e649e070f10c25210670795eb5eed464fb9e86729" }, "downloads": -1, "filename": "spylunking-1.0.11.tar.gz", "has_sig": false, "md5_digest": "704117fc293f79d5e1259ea9c6b5f5f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16107, "upload_time": "2018-06-23T21:23:37", "url": "https://files.pythonhosted.org/packages/c0/e0/34175ff1feef98953e164fd780eb4a233e7ba42585fb2133d4ae97c4f2ec/spylunking-1.0.11.tar.gz" } ], "1.0.12": [ { "comment_text": "", "digests": { "md5": "241b3f0814bbb03c621024185e2d889c", "sha256": "0e26fdd04d08bb82b17c27839dfcab930db5657e779ddb5495f3140f015c7b61" }, "downloads": -1, "filename": "spylunking-1.0.12-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "241b3f0814bbb03c621024185e2d889c", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 45834, "upload_time": "2018-06-23T21:45:28", "url": "https://files.pythonhosted.org/packages/3e/a1/ddc1ec0d296dd614769ff815f0320db101763cf60136e31218675ecc3435/spylunking-1.0.12-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "26fdeb325346fdb0fd73791ec62cbf69", "sha256": "055c90ddc0f883ba028ce4a4ca5e2772bad004b0c04a45010ae19a63295411db" }, "downloads": -1, "filename": "spylunking-1.0.12.tar.gz", "has_sig": false, "md5_digest": "26fdeb325346fdb0fd73791ec62cbf69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16558, "upload_time": "2018-06-23T21:45:27", "url": "https://files.pythonhosted.org/packages/5e/ba/f614abac571d8884ef6490042b6e648ee48b0e595f80a511d8be40d6d782/spylunking-1.0.12.tar.gz" } ], "1.0.13": [ { "comment_text": "", "digests": { "md5": "4e557b40d896d13e53cdd46841679ced", "sha256": "bd9ea65639d95cc4792d0706922d878f20636d95581310054562b7aa9d0adae8" }, "downloads": -1, "filename": "spylunking-1.0.13-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4e557b40d896d13e53cdd46841679ced", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 47034, "upload_time": "2018-06-24T08:32:55", "url": "https://files.pythonhosted.org/packages/3a/a6/963254c5108800036b449147225b5e42c4cd1b394aad3a31dca556237567/spylunking-1.0.13-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "026dfbde0b9b5bbf7719679373cabcec", "sha256": "8cda15882cc42ee53d58465db7fe29b9b50f9853bd45232c1b4f1c8637d5b657" }, "downloads": -1, "filename": "spylunking-1.0.13.tar.gz", "has_sig": false, "md5_digest": "026dfbde0b9b5bbf7719679373cabcec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16971, "upload_time": "2018-06-24T08:32:53", "url": "https://files.pythonhosted.org/packages/28/61/f6af83b8cdbeaa5e7b1beb75e103d1120090c712ebdfb26ea242c8701b6a/spylunking-1.0.13.tar.gz" } ], "1.0.15": [ { "comment_text": "", "digests": { "md5": "f8760466a1e5f55a77c83c4bcc9af9d0", "sha256": "937333616463b3e77f73ee3916b28911f62d4f3f3f30b86e87e41d457ebea0e0" }, "downloads": -1, "filename": "spylunking-1.0.15-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f8760466a1e5f55a77c83c4bcc9af9d0", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 47051, "upload_time": "2018-06-24T08:54:22", "url": "https://files.pythonhosted.org/packages/a1/22/21ab5221dc087fc9558d00523f4a1e8c1399b8a589233776934bbb508761/spylunking-1.0.15-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6da7ccbc476546bc4b6bfba53d3e306d", "sha256": "f6ba6cf779ff35cf90585174d7cc197ec933243ee7be05513e7fb55a3bbd7505" }, "downloads": -1, "filename": "spylunking-1.0.15.tar.gz", "has_sig": false, "md5_digest": "6da7ccbc476546bc4b6bfba53d3e306d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17060, "upload_time": "2018-06-24T08:54:20", "url": "https://files.pythonhosted.org/packages/6a/c0/07ca552f88f77ebe5adaa5bc7ad13580de6ef325a44993737d561adafa57/spylunking-1.0.15.tar.gz" } ], "1.0.16": [ { "comment_text": "", "digests": { "md5": "b694c52aa41ec963e00747be6b6ac3ee", "sha256": "13e056633e326b577cfa0e761b9f0de81b844ad45c903224c4b3531196516e2b" }, "downloads": -1, "filename": "spylunking-1.0.16-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b694c52aa41ec963e00747be6b6ac3ee", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 47929, "upload_time": "2018-06-24T09:23:46", "url": "https://files.pythonhosted.org/packages/70/62/9371cc60667fc3ce225946c816d280db87e16d21338fe3ce188924cb411a/spylunking-1.0.16-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "775390cbfe5660f0cd703fd543dd4d6e", "sha256": "554196b9a425303cc62f866a06e2de7dc2536eb8c33c61bf8d43a849ec02e65a" }, "downloads": -1, "filename": "spylunking-1.0.16.tar.gz", "has_sig": false, "md5_digest": "775390cbfe5660f0cd703fd543dd4d6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17483, "upload_time": "2018-06-24T09:23:44", "url": "https://files.pythonhosted.org/packages/bc/61/3c38916c8e8f7d9c284017f90b8df638141cef6a84435b5644f9ef9dced5/spylunking-1.0.16.tar.gz" } ], "1.0.17": [ { "comment_text": "", "digests": { "md5": "de71b565f48165adf90fdc7ea680803f", "sha256": "e9fd482939ac88b4064b72adcac90b590239792584589a1db36d2c77ca38c175" }, "downloads": -1, "filename": "spylunking-1.0.17-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "de71b565f48165adf90fdc7ea680803f", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 39201, "upload_time": "2018-06-24T15:24:32", "url": "https://files.pythonhosted.org/packages/00/c3/e4385e8eaf809148449a998b39b7a4eed8f8e60b0b2cefab3a8d7bff6a8c/spylunking-1.0.17-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "febc71941eb882db0e2e427a790e40f5", "sha256": "858158bae31e1d69e3247c91b81726574ad968f168574cb26c668089c37a5a2c" }, "downloads": -1, "filename": "spylunking-1.0.17.tar.gz", "has_sig": false, "md5_digest": "febc71941eb882db0e2e427a790e40f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17327, "upload_time": "2018-06-24T15:24:30", "url": "https://files.pythonhosted.org/packages/b9/18/4ce32538d6ef83ca835721c7fa4c33261731575fc6e7be0f9d532ff9b8c8/spylunking-1.0.17.tar.gz" } ], "1.0.18": [ { "comment_text": "", "digests": { "md5": "c7371d9355849414351719b330229b52", "sha256": "8c34cdec9947b0ce69d226d1b6fbe056b417bb7fb4c92358f42e24ee198f2c4c" }, "downloads": -1, "filename": "spylunking-1.0.18-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c7371d9355849414351719b330229b52", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 39203, "upload_time": "2018-06-24T15:42:49", "url": "https://files.pythonhosted.org/packages/a1/52/2598a49c3c942d7b9238c2cb1ff977df39fb8bc5849fb5061a7942ed7ea5/spylunking-1.0.18-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dbc82d7bb9970acb4fe146a1ee614e4c", "sha256": "b0c88c11d8c8a921f1a16d390105c94395a00bf132221118d3214ca62edcc394" }, "downloads": -1, "filename": "spylunking-1.0.18.tar.gz", "has_sig": false, "md5_digest": "dbc82d7bb9970acb4fe146a1ee614e4c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17307, "upload_time": "2018-06-24T15:42:47", "url": "https://files.pythonhosted.org/packages/71/20/cbc7b6c7aa5fd64f035950cbcf937151da31ee3c99a48706b765cb7ff7b0/spylunking-1.0.18.tar.gz" } ], "1.0.19": [ { "comment_text": "", "digests": { "md5": "4e331df7aed607d30a0d01bd417b6b0f", "sha256": "783cadbf0f40e99dc63654e665c909ab48a2689bdd8411d020c4b25a50812230" }, "downloads": -1, "filename": "spylunking-1.0.19-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4e331df7aed607d30a0d01bd417b6b0f", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 46636, "upload_time": "2018-06-24T16:02:10", "url": "https://files.pythonhosted.org/packages/f2/43/42a8c5fa87365f60b4c2da9064b2c2cc9439a9a2081055c3b9aeca64881c/spylunking-1.0.19-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1bdfd2da35cc9f308d0e4dcbc0f316b8", "sha256": "01ece664340d507d1a206e33126bdae1f890bb25e61a56ca12a29dfa733944ae" }, "downloads": -1, "filename": "spylunking-1.0.19.tar.gz", "has_sig": false, "md5_digest": "1bdfd2da35cc9f308d0e4dcbc0f316b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17352, "upload_time": "2018-06-24T16:02:08", "url": "https://files.pythonhosted.org/packages/e4/2b/79e67b2ca637fcefd118e6a4489b7cbbcce1f07ec92efec53a7e2a546232/spylunking-1.0.19.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "5bbcef40bf9f2ee8ebab292a95604b8a", "sha256": "8e1def0f3e473b37e54b4939aa3a6a2d75880b29e8649228c5c70b271f64fb86" }, "downloads": -1, "filename": "spylunking-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5bbcef40bf9f2ee8ebab292a95604b8a", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 34833, "upload_time": "2018-06-22T00:20:39", "url": "https://files.pythonhosted.org/packages/2b/6b/42bb8fb0c05f002bb2b90a166a085f07d3d2cf2bf69e8dbd878f13a8a53b/spylunking-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "803893ce70baddb78ab97f3964cd44ce", "sha256": "6d2c0aa814d1f94416cde7b0bd5072941cf61b91874ccf9db380956a408ea00e" }, "downloads": -1, "filename": "spylunking-1.0.2.tar.gz", "has_sig": false, "md5_digest": "803893ce70baddb78ab97f3964cd44ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13520, "upload_time": "2018-06-22T00:20:38", "url": "https://files.pythonhosted.org/packages/24/0e/bd2e14b5d0420187e53e936fe651b994fc327bb3fe27346888fd70679e4c/spylunking-1.0.2.tar.gz" } ], "1.0.20": [ { "comment_text": "", "digests": { "md5": "0fe14f8cb988a266009e8e8a8f12414e", "sha256": "277f81a1a950624525f2c3821732f8c27d9e6c8c5e3221516ed0ce916e287cc8" }, "downloads": -1, "filename": "spylunking-1.0.20-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0fe14f8cb988a266009e8e8a8f12414e", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 47471, "upload_time": "2018-06-24T17:36:58", "url": "https://files.pythonhosted.org/packages/4d/4b/1c60f1ebda88c25a808ba6da4887dcef82df35e12a0b61043114f34be986/spylunking-1.0.20-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1f18203ffca6f93c8e2861f32d24440d", "sha256": "9ea921d8273e9a93794ca3268c05a53fe713d9755f0e2bcbc54bc4e33eb5d653" }, "downloads": -1, "filename": "spylunking-1.0.20.tar.gz", "has_sig": false, "md5_digest": "1f18203ffca6f93c8e2861f32d24440d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17600, "upload_time": "2018-06-24T17:36:56", "url": "https://files.pythonhosted.org/packages/79/3a/9f05308b38c775557825ae3e7913250f24531f8a258b0d13026fa1e07e44/spylunking-1.0.20.tar.gz" } ], "1.0.21": [ { "comment_text": "", "digests": { "md5": "bd82d2b96facb5e14f5ddf99892267e5", "sha256": "3241747acc624277acbf956026cc86e012519318b36b3d38cbb278076d838839" }, "downloads": -1, "filename": "spylunking-1.0.21-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bd82d2b96facb5e14f5ddf99892267e5", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 47469, "upload_time": "2018-06-24T18:00:34", "url": "https://files.pythonhosted.org/packages/45/bf/58cafe354c9d8441687242dc130c98d51815b56cdced09a4e3655bbdc52b/spylunking-1.0.21-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ab15925d14a05cb4fa51681e48d8d335", "sha256": "f96012c10975a5c1c939701c23de08e3b8fd4b3b966ea1fcf1706c6bb23111eb" }, "downloads": -1, "filename": "spylunking-1.0.21.tar.gz", "has_sig": false, "md5_digest": "ab15925d14a05cb4fa51681e48d8d335", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17618, "upload_time": "2018-06-24T18:00:32", "url": "https://files.pythonhosted.org/packages/8b/7a/fb96f09ec59ad71c7039ef52aecf91e3344210c7db5edc3da48c1605536f/spylunking-1.0.21.tar.gz" } ], "1.0.22": [ { "comment_text": "", "digests": { "md5": "d8483a96188dbfc745ddacd9129dfe44", "sha256": "86bd253fa01d5ebdc2f5e23a9abe11b3f3cf62b2b5abc42cb2ad5f6caf355122" }, "downloads": -1, "filename": "spylunking-1.0.22-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d8483a96188dbfc745ddacd9129dfe44", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 51279, "upload_time": "2018-06-25T23:57:52", "url": "https://files.pythonhosted.org/packages/84/44/50990c94f785607ed20b9d9889ed93b771acfe5e1f94866eb2c9a882e5c7/spylunking-1.0.22-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "abfdfc1cd2cffc432e46107d872ea78d", "sha256": "3303490fb72d21439fb3d39010519d97c7c1ed9a8eb564d5e490c01df211dd5a" }, "downloads": -1, "filename": "spylunking-1.0.22.tar.gz", "has_sig": false, "md5_digest": "abfdfc1cd2cffc432e46107d872ea78d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18865, "upload_time": "2018-06-25T23:57:50", "url": "https://files.pythonhosted.org/packages/81/c9/83b195b69d149b513ddc1a483025c2a28211fae6133ea69b5a7a26367f33/spylunking-1.0.22.tar.gz" } ], "1.0.23": [ { "comment_text": "", "digests": { "md5": "ce15ae199715c7d8a8141a8eaf84c6e5", "sha256": "4c68da7816dd0a8c88f2d0d61fa48c61bc10875b08444071f22e5d3ec544a766" }, "downloads": -1, "filename": "spylunking-1.0.23-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ce15ae199715c7d8a8141a8eaf84c6e5", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 49566, "upload_time": "2018-06-26T04:21:23", "url": "https://files.pythonhosted.org/packages/32/b0/c54e4153705f364ed6c923d5ef0939f0dab3c1d729c3cca1fd1522a2f12a/spylunking-1.0.23-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eb1c52b9d1dc0265887ec99945b8ba6e", "sha256": "2008ede65add1905eb6f5a8170f4fd96558f30b974b0ddf6f12fa035a5cee5f3" }, "downloads": -1, "filename": "spylunking-1.0.23.tar.gz", "has_sig": false, "md5_digest": "eb1c52b9d1dc0265887ec99945b8ba6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19870, "upload_time": "2018-06-26T04:21:21", "url": "https://files.pythonhosted.org/packages/b0/91/923878045508bab375511a7de2e0694b9132f85f25d946f7dab725cec32d/spylunking-1.0.23.tar.gz" } ], "1.0.24": [ { "comment_text": "", "digests": { "md5": "7d8f5324f8b72b831a9d058fcb18a2aa", "sha256": "0a3d0b3af6c1de43d2ca46d2cd2833e38bbd7d714ae9194e914b228824c85fa2" }, "downloads": -1, "filename": "spylunking-1.0.24-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7d8f5324f8b72b831a9d058fcb18a2aa", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 59171, "upload_time": "2018-06-28T18:55:39", "url": "https://files.pythonhosted.org/packages/4e/d4/fe25fd1d272774b5f35b49b31132961e206f5b9c199dbece89973bcb39b8/spylunking-1.0.24-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d60e2f2d7c78d98f8821320f593949a1", "sha256": "2cfa4a6bf442143d0cd80903940d9a0284ea30c706fda2998dfb37e0ef22f6e5" }, "downloads": -1, "filename": "spylunking-1.0.24.tar.gz", "has_sig": false, "md5_digest": "d60e2f2d7c78d98f8821320f593949a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22584, "upload_time": "2018-06-28T18:55:37", "url": "https://files.pythonhosted.org/packages/82/36/346f6fe29c8a851529044af87e49cef88b109df437ae918447b6e497e0a8/spylunking-1.0.24.tar.gz" } ], "1.0.25": [ { "comment_text": "", "digests": { "md5": "1087d00454448370b76ddbd35f066fe7", "sha256": "35e614107a5d6ac605fec877881fe7bf2df106685bb0bba60f404bf878c0e46a" }, "downloads": -1, "filename": "spylunking-1.0.25-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1087d00454448370b76ddbd35f066fe7", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 56848, "upload_time": "2018-06-29T05:24:46", "url": "https://files.pythonhosted.org/packages/20/15/ee83c03b2bfe6babecc6765ccfa0adf0772b548e6ff942317095db324eae/spylunking-1.0.25-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0283dae3848129946ed98477fc858202", "sha256": "24951336590386b8601e55b42c27ff13ec574b602710b900ecf97353c93ea4da" }, "downloads": -1, "filename": "spylunking-1.0.25.tar.gz", "has_sig": false, "md5_digest": "0283dae3848129946ed98477fc858202", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22793, "upload_time": "2018-06-29T05:24:44", "url": "https://files.pythonhosted.org/packages/4d/90/bfa0b3bcd0ffa4af8beb8e1957e5d2dc29e1f9e658d9c0f080f667d323cf/spylunking-1.0.25.tar.gz" } ], "1.0.26": [ { "comment_text": "", "digests": { "md5": "06e789b8583326a7220b11327d38cc6b", "sha256": "940a6efac192cca7268b90b47bdeb10d94f823bb653e64e583054e82f97c71ce" }, "downloads": -1, "filename": "spylunking-1.0.26-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "06e789b8583326a7220b11327d38cc6b", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 60791, "upload_time": "2018-07-01T08:16:24", "url": "https://files.pythonhosted.org/packages/d7/3d/f8f1f7a16516925e6dd4feb0429e04d46a796c859d2cd66eb587d55bda98/spylunking-1.0.26-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3176cf279790345401cc63ae1a30b2bc", "sha256": "dd237247570be34190d3b8d25bdb1c333d4529480c6a7947dd8febac44f30f6d" }, "downloads": -1, "filename": "spylunking-1.0.26.tar.gz", "has_sig": false, "md5_digest": "3176cf279790345401cc63ae1a30b2bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30780, "upload_time": "2018-07-01T08:16:23", "url": "https://files.pythonhosted.org/packages/17/e6/093a09a81daa2020562efe4cf090f6cbf78847250791b82df5ef29adbac6/spylunking-1.0.26.tar.gz" } ], "1.0.27": [ { "comment_text": "", "digests": { "md5": "dae53872add94429c44b08ac7a0ab374", "sha256": "485d629812ce7c7e433c16080cd22f1173b8f490ac1085d2c74c5ac015a0d1f4" }, "downloads": -1, "filename": "spylunking-1.0.27-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dae53872add94429c44b08ac7a0ab374", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 90011, "upload_time": "2018-07-02T05:54:51", "url": "https://files.pythonhosted.org/packages/b8/ad/c3c007c3a90eb7ba9fa7d4b6bb4a73adf3ae0eea53b61dfd1329075eb4ec/spylunking-1.0.27-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1e8685a100dae21a5fa0561da33177f4", "sha256": "1421a3599270ef23a62aba4fa44437d1669866b0f7de1522136ac3e4f4ddfaf9" }, "downloads": -1, "filename": "spylunking-1.0.27.tar.gz", "has_sig": false, "md5_digest": "1e8685a100dae21a5fa0561da33177f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34015, "upload_time": "2018-07-02T05:54:49", "url": "https://files.pythonhosted.org/packages/8e/9f/c89868d42b9d10ce8a03229c41096fc2c0779abd94d9319a20cda8cfadf6/spylunking-1.0.27.tar.gz" } ], "1.0.28": [ { "comment_text": "", "digests": { "md5": "7138c776eda2dba76b8ed687f4cc50ea", "sha256": "93fe203304af7bfdd8760c3030220a8d0726a50b7be2dbefb4400344a80996ac" }, "downloads": -1, "filename": "spylunking-1.0.28-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7138c776eda2dba76b8ed687f4cc50ea", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 91072, "upload_time": "2018-07-02T06:02:09", "url": "https://files.pythonhosted.org/packages/24/a5/6e88f0b398910cd63b65403582064b205fe29fb6724194f95003aceb25dd/spylunking-1.0.28-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d07ec4d5d0cbd132d544507dd3f2d56e", "sha256": "b830a5ccf65a2376262bac55250c0c8639587c9c80e399adc263d4ef77a05ce3" }, "downloads": -1, "filename": "spylunking-1.0.28.tar.gz", "has_sig": false, "md5_digest": "d07ec4d5d0cbd132d544507dd3f2d56e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35135, "upload_time": "2018-07-02T06:02:08", "url": "https://files.pythonhosted.org/packages/04/52/007006e466c8ba17a5a1af4103b79ffcfdd92a8982286b811c77b9f3d1b4/spylunking-1.0.28.tar.gz" } ], "1.0.29": [ { "comment_text": "", "digests": { "md5": "61db24a340700e56a798f88bdf4bf051", "sha256": "6fb9aa574dde1e67c38c90e2acc0f78d4977eb7b30a7c8d0dcedf18be2819670" }, "downloads": -1, "filename": "spylunking-1.0.29-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "61db24a340700e56a798f88bdf4bf051", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 74643, "upload_time": "2018-07-02T16:25:09", "url": "https://files.pythonhosted.org/packages/3b/5c/3a3f2627fb74942a3169f8c3a2629346bd158e4354d134178d9629f933fc/spylunking-1.0.29-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08b358caad395cb6c466c86e2ae99cca", "sha256": "70da1755d5b82949819fb42b9edb6e542585cbd89f6e805fe498bfb435069c07" }, "downloads": -1, "filename": "spylunking-1.0.29.tar.gz", "has_sig": false, "md5_digest": "08b358caad395cb6c466c86e2ae99cca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35836, "upload_time": "2018-07-02T16:25:08", "url": "https://files.pythonhosted.org/packages/ff/58/92191cf9a1ed3f5b4d610687905b0468be77b0e1dbdd1d5ea80502f1f30b/spylunking-1.0.29.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "d45d258d34a434b8113f5e7992503b46", "sha256": "ab60ea101b6c77edc3641918dd590f2d9972d61b5c54fb17fe1a9647189b20e8" }, "downloads": -1, "filename": "spylunking-1.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d45d258d34a434b8113f5e7992503b46", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 35882, "upload_time": "2018-06-22T05:57:10", "url": "https://files.pythonhosted.org/packages/26/51/99b20b4f9c4e1abf150891c5f42f3d88f0005a8bcc0e33e99245de1efb07/spylunking-1.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eec5e4c2b5eb3dd5aaf02dfe4bb8aceb", "sha256": "84cf3c89fc4945b3fac6a6011ad602def3441d26e60c38e734f187f7d89b553e" }, "downloads": -1, "filename": "spylunking-1.0.3.tar.gz", "has_sig": false, "md5_digest": "eec5e4c2b5eb3dd5aaf02dfe4bb8aceb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15733, "upload_time": "2018-06-22T05:57:08", "url": "https://files.pythonhosted.org/packages/25/0d/b9493aab29995e84e3df47b56b089586f7b4eb82a91634f4245e3ee82ba1/spylunking-1.0.3.tar.gz" } ], "1.0.30": [ { "comment_text": "", "digests": { "md5": "0f1f57fb37a02265fd2c8dbc48b55f9f", "sha256": "77c1d56f32bc3ba3d6103e0494433b124e59952890b82f56ce913d02a6eb4235" }, "downloads": -1, "filename": "spylunking-1.0.30-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0f1f57fb37a02265fd2c8dbc48b55f9f", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 74644, "upload_time": "2018-07-02T16:27:10", "url": "https://files.pythonhosted.org/packages/fb/81/ce3286751d94e971c5b9e4b60280449d7613f1112f8b6b62ad6d9c5019ae/spylunking-1.0.30-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a43255c8e5f21a28e95ea714452cd6a", "sha256": "2fa0f824f6c1e6a3d4b10425c3facbce63179ae214b1e5165d5f14506f72a329" }, "downloads": -1, "filename": "spylunking-1.0.30.tar.gz", "has_sig": false, "md5_digest": "5a43255c8e5f21a28e95ea714452cd6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35829, "upload_time": "2018-07-02T16:27:08", "url": "https://files.pythonhosted.org/packages/cd/7b/6a5e3a0e6524b7a892afe987e24b1ed93d2da5bae362b58035bd94a9b719/spylunking-1.0.30.tar.gz" } ], "1.0.31": [ { "comment_text": "", "digests": { "md5": "eaf910ab8ec0de2e1c7e52c0e76ed42b", "sha256": "cc918ef89a5caabab4b6b56c15bea9f2d152880aaccc12bffea93053c8875d0f" }, "downloads": -1, "filename": "spylunking-1.0.31-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "eaf910ab8ec0de2e1c7e52c0e76ed42b", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 74643, "upload_time": "2018-07-02T16:31:32", "url": "https://files.pythonhosted.org/packages/c1/c9/ba45a8395d7cd8f5eb12f8ae60bfc5089203721e605318c2749e7bfc9443/spylunking-1.0.31-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13eeafff2a9f6c73655372097d7655ec", "sha256": "624f5a6d0f8401199776e2b19c0cc25d80e4a48d8ecebea72fff6f50ced54c66" }, "downloads": -1, "filename": "spylunking-1.0.31.tar.gz", "has_sig": false, "md5_digest": "13eeafff2a9f6c73655372097d7655ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35832, "upload_time": "2018-07-02T16:31:30", "url": "https://files.pythonhosted.org/packages/a6/2d/19dbd5a6f5af1b98e6699a0a8dc176c5950259f8f0543c2efea05882bbdd/spylunking-1.0.31.tar.gz" } ], "1.0.32": [ { "comment_text": "", "digests": { "md5": "beafeb055e99fad4c7193331e9328e26", "sha256": "81030d23191930deec4551f835017f3a5ca3596599c98e363b4bbf1502304dd2" }, "downloads": -1, "filename": "spylunking-1.0.32-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "beafeb055e99fad4c7193331e9328e26", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 93913, "upload_time": "2018-07-03T06:04:03", "url": "https://files.pythonhosted.org/packages/ea/21/6d75fcf4d272f447928a60bb75e32996e2bc3ff0416a5fb69b618561032f/spylunking-1.0.32-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7ada809b85ed78f06b1b52dfddf4c2ea", "sha256": "5c1686c93acd80b0b4bc134819e6f7bd0f2c5b5406c8a2973f9b82c1d2ecd276" }, "downloads": -1, "filename": "spylunking-1.0.32.tar.gz", "has_sig": false, "md5_digest": "7ada809b85ed78f06b1b52dfddf4c2ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36003, "upload_time": "2018-07-03T06:04:01", "url": "https://files.pythonhosted.org/packages/bd/c1/c382af75eaa815a98ade40fed3601f7b378548d384f29e14f4e5095c1ac5/spylunking-1.0.32.tar.gz" } ], "1.0.33": [ { "comment_text": "", "digests": { "md5": "b078ab4d176912e3540fc60141bbf911", "sha256": "612efec705ed1feb1388f46a1f943ab7d771b8be287861423c74a6f59ebb3ac4" }, "downloads": -1, "filename": "spylunking-1.0.33-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b078ab4d176912e3540fc60141bbf911", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 76957, "upload_time": "2018-07-03T07:46:54", "url": "https://files.pythonhosted.org/packages/96/eb/d3263ceac227975f8577674f1918890542087699ce6a9e69af86f7cff305/spylunking-1.0.33-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf5438010f6665022a61abf161bd6564", "sha256": "46b5bedaf2e9bca0c4a290b75512fa33aca0d20bb49d8155804ce46f6c69851e" }, "downloads": -1, "filename": "spylunking-1.0.33.tar.gz", "has_sig": false, "md5_digest": "bf5438010f6665022a61abf161bd6564", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36890, "upload_time": "2018-07-03T07:46:52", "url": "https://files.pythonhosted.org/packages/32/b7/bceb635ff3eb684351f1971ab48156a5d245a6d19fd1faa01064c0a46571/spylunking-1.0.33.tar.gz" } ], "1.0.34": [ { "comment_text": "", "digests": { "md5": "862127db52e264076879e63d2abdc5ff", "sha256": "a6691b0e50eb42a5a1023caff36a5f5357c54a2cb74feef7f0345382ae059144" }, "downloads": -1, "filename": "spylunking-1.0.34-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "862127db52e264076879e63d2abdc5ff", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 98947, "upload_time": "2018-07-04T04:31:25", "url": "https://files.pythonhosted.org/packages/d3/9a/7ee32c4504180a54d13ad78a152a1fe50cdc4a84c4dd9b41adb0ab2162c1/spylunking-1.0.34-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9c516ffaba141244f3f2d4cd83a4cfd7", "sha256": "641efe6a180cfcc94716eead5b385787f70781c31104e9b4c81dc6aa4c523121" }, "downloads": -1, "filename": "spylunking-1.0.34.tar.gz", "has_sig": false, "md5_digest": "9c516ffaba141244f3f2d4cd83a4cfd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38789, "upload_time": "2018-07-04T04:31:24", "url": "https://files.pythonhosted.org/packages/1d/fd/871e5819a50eb42999d67d61ae1835a865947fb11c06d89d9d8d684d82a3/spylunking-1.0.34.tar.gz" } ], "1.0.35": [ { "comment_text": "", "digests": { "md5": "c932a7f8a7378c267ab634b79a59543b", "sha256": "4a907bf328f41c01b5686c269f478a6ec17843ee39671275e4c99812de744b58" }, "downloads": -1, "filename": "spylunking-1.0.35-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c932a7f8a7378c267ab634b79a59543b", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 85100, "upload_time": "2018-07-04T08:21:26", "url": "https://files.pythonhosted.org/packages/20/3b/c38eee8de086358d0a7b89b1dbe1ac5c084d58bd44613487dd2d4e2c97c5/spylunking-1.0.35-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a5b01afe1a1024ac8f275fe6688cb0d5", "sha256": "0d3bb089818be81777b0cabf8d964afc7f9b6d0692ce2c3ace2aace21b7e0958" }, "downloads": -1, "filename": "spylunking-1.0.35.tar.gz", "has_sig": false, "md5_digest": "a5b01afe1a1024ac8f275fe6688cb0d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38809, "upload_time": "2018-07-04T08:21:24", "url": "https://files.pythonhosted.org/packages/e5/1b/0f40fbf663f2bee5aa36faaf7d3b104d2adaa3b0275e464fb72fde957cf9/spylunking-1.0.35.tar.gz" } ], "1.0.36": [ { "comment_text": "", "digests": { "md5": "94abbc85d353487f56620044d4eab5b7", "sha256": "a2500a3d6a3f6ff7e4cfa0e559e39cc33dc8332f8bd823f8d9ca4a7e00ce9536" }, "downloads": -1, "filename": "spylunking-1.0.36-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "94abbc85d353487f56620044d4eab5b7", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 85945, "upload_time": "2018-07-04T09:20:30", "url": "https://files.pythonhosted.org/packages/15/04/b3561fe713f3f20f667e2058792880b1f37c0a3bb9bfac31cf9e88c9f554/spylunking-1.0.36-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f781428afe428b462578632c0b7bb81", "sha256": "c98e049bb1ae212c8524a6a16eb141044357beadfbccf85a3076c01ba8a426b4" }, "downloads": -1, "filename": "spylunking-1.0.36.tar.gz", "has_sig": false, "md5_digest": "9f781428afe428b462578632c0b7bb81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39107, "upload_time": "2018-07-04T09:20:28", "url": "https://files.pythonhosted.org/packages/84/d8/a43a83171189026621c6f9b0349a9d3c7d5ae85e3d668cd580525cc40432/spylunking-1.0.36.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "9d4a475389853c1c226a4fd840ea6d59", "sha256": "f26627b095a6c8ae353b93671e188aeed52e8695baa2d30eb94d57b6aa33c8fb" }, "downloads": -1, "filename": "spylunking-1.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9d4a475389853c1c226a4fd840ea6d59", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 43581, "upload_time": "2018-06-22T06:20:32", "url": "https://files.pythonhosted.org/packages/51/e7/e04ecea765899215317ed77e93e39e8e412b1ee13385b04a20000055ac38/spylunking-1.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "95f42b7c136b3d2e211c9282184de3b8", "sha256": "4561a36d44f9bc984447c1e215872d8827cd5d43c0b6e4a76360fff22cf2f771" }, "downloads": -1, "filename": "spylunking-1.0.4.tar.gz", "has_sig": false, "md5_digest": "95f42b7c136b3d2e211c9282184de3b8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15731, "upload_time": "2018-06-22T06:20:31", "url": "https://files.pythonhosted.org/packages/99/2f/0b34f01c002ecb5152c8b4f2f6d2e1fb235fcb884e648d124ffee66eed99/spylunking-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "a4ffefd55b194ff7f9cac9bd14e26ec6", "sha256": "9547dcc68e794abeb484db21228f3ae7d28cb1997ecd9660d297b098871f0bdd" }, "downloads": -1, "filename": "spylunking-1.0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a4ffefd55b194ff7f9cac9bd14e26ec6", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 43581, "upload_time": "2018-06-22T06:56:48", "url": "https://files.pythonhosted.org/packages/4e/98/e150bf1149441dddee357e7906780196d02c6c41c44da79dde8771d4e82a/spylunking-1.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "22b34c33d5ef7ee0ca9fe7e7809d91e8", "sha256": "2de0211ebb6c7133f6b305370f5777f232ee730785b0de9e7e5dc3f195e28fd1" }, "downloads": -1, "filename": "spylunking-1.0.5.tar.gz", "has_sig": false, "md5_digest": "22b34c33d5ef7ee0ca9fe7e7809d91e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15804, "upload_time": "2018-06-22T06:56:46", "url": "https://files.pythonhosted.org/packages/90/58/54748ebc6dc914d6077e8da49c86fb7494148b9f95407fc4de537ce93670/spylunking-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "bbabd5ba6965c7d8808b1b717df40032", "sha256": "bbd8a640b1842349c2e66fe0a0a584e992843595139672969a392ee2c8bc12b4" }, "downloads": -1, "filename": "spylunking-1.0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bbabd5ba6965c7d8808b1b717df40032", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 43579, "upload_time": "2018-06-22T06:59:46", "url": "https://files.pythonhosted.org/packages/d0/7f/691b4681255ec0862cafb061ea0737891965827ef94e51b43e0a8f6073a9/spylunking-1.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8212e0a34392194188fd5b86b809d561", "sha256": "706d260a752908a5ec05cc31de1206b33c3da338f4dffadb6ceff99294bee4d5" }, "downloads": -1, "filename": "spylunking-1.0.6.tar.gz", "has_sig": false, "md5_digest": "8212e0a34392194188fd5b86b809d561", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15803, "upload_time": "2018-06-22T06:59:44", "url": "https://files.pythonhosted.org/packages/38/8b/f3abfb341401c8549739fe7d40286cbf5aa18c592f2809ab285093b98d99/spylunking-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "5a7eda5ca3729f2205ad471db5eb44ef", "sha256": "47849d17cb7cc1dbf8782bab0ce2236a34a98c58ee7be1dfe4a962f90086cf6d" }, "downloads": -1, "filename": "spylunking-1.0.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5a7eda5ca3729f2205ad471db5eb44ef", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 43523, "upload_time": "2018-06-22T07:03:10", "url": "https://files.pythonhosted.org/packages/68/5a/165b4fb9495255ed0bc31eb38fbd715b1b756e57538dd50bf86a0e62b3ba/spylunking-1.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ebf20a85eba677fc80c88558b5d87c0d", "sha256": "c833d1397eaf1c651587a284a9ee63611f41cd661878ee541bcf961e5d017206" }, "downloads": -1, "filename": "spylunking-1.0.7.tar.gz", "has_sig": false, "md5_digest": "ebf20a85eba677fc80c88558b5d87c0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15793, "upload_time": "2018-06-22T07:03:09", "url": "https://files.pythonhosted.org/packages/4e/4d/987d80c66f7bd80ad10f396761193f70439e961b922b0729e3ccdf5fd110/spylunking-1.0.7.tar.gz" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "879db8baaaeafcb849de525a239f78b3", "sha256": "d2b4f08d08efc65f65cb9c5ea66d355aa2fe54597a277e89059f0c53b071fc07" }, "downloads": -1, "filename": "spylunking-1.0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "879db8baaaeafcb849de525a239f78b3", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 43468, "upload_time": "2018-06-22T14:58:56", "url": "https://files.pythonhosted.org/packages/79/c3/e1801fcf5a8b4c82514a09c8a63389378fab5b7a01e909555357446a6044/spylunking-1.0.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "15193244bb4f4b74bf38f76369bd6779", "sha256": "7fc3cde8d1a827fa1c1575388966d1472d6554a1b9375bdee51bc90486445604" }, "downloads": -1, "filename": "spylunking-1.0.8.tar.gz", "has_sig": false, "md5_digest": "15193244bb4f4b74bf38f76369bd6779", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15904, "upload_time": "2018-06-22T14:58:55", "url": "https://files.pythonhosted.org/packages/db/0b/6e92ee2195c73add609a8d00d79411c360de148e064c06b16cdc2e07a0ae/spylunking-1.0.8.tar.gz" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "3307c4a9cb84dc131734b958dc386986", "sha256": "69b9d5fbf8a0a4f831fa90092966d80881f6a8bd6a8a91d8dcb246cb920dffac" }, "downloads": -1, "filename": "spylunking-1.0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3307c4a9cb84dc131734b958dc386986", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 35460, "upload_time": "2018-06-23T07:23:24", "url": "https://files.pythonhosted.org/packages/a6/a5/bde4f64ee3910b2b1a580a87fbd0d5efb5da3e37c6a284cf77eacf7e6cd1/spylunking-1.0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8546ecf01cc9525659d61d0a91b3fc2d", "sha256": "30190a71a1ad6a41652c9d6a04c3ba92d1942e9014099ee7420af46131cb2993" }, "downloads": -1, "filename": "spylunking-1.0.9.tar.gz", "has_sig": false, "md5_digest": "8546ecf01cc9525659d61d0a91b3fc2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15511, "upload_time": "2018-06-23T07:23:23", "url": "https://files.pythonhosted.org/packages/6c/71/bd2ff057973ab2c214e7885b0111e0f5282bfd65917a970728004c29d519/spylunking-1.0.9.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "86266d58d49f0f1af2f9904988780e9d", "sha256": "e38d2ea06665eca3135c06af7137782c55f8e74b403d3a62fc78c69aba48d742" }, "downloads": -1, "filename": "spylunking-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "86266d58d49f0f1af2f9904988780e9d", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 107678, "upload_time": "2018-07-04T20:12:18", "url": "https://files.pythonhosted.org/packages/d2/1d/1f89c1bd5746d8445a58161a07052fb57740e8ac4ba915e9f24e66788852/spylunking-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4849548f60eeac1c2466585c64e996fe", "sha256": "86f367894fa0e096739348b789415d22df7818bf81b5d192c4aaeb0452443c9e" }, "downloads": -1, "filename": "spylunking-1.1.0.tar.gz", "has_sig": false, "md5_digest": "4849548f60eeac1c2466585c64e996fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41533, "upload_time": "2018-07-04T20:12:16", "url": "https://files.pythonhosted.org/packages/80/28/7c87df958d41913cc980ef6e4bed44515db7ef0e0411468ad1ba7b3a1c3a/spylunking-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "1106ccf3cc284730ddd0b560e9d52ab9", "sha256": "3a6b24021ea0a54ca4ef11054642a0df57ba818e9bb68dc94a50635286e5cba8" }, "downloads": -1, "filename": "spylunking-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1106ccf3cc284730ddd0b560e9d52ab9", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 73676, "upload_time": "2018-07-09T06:33:01", "url": "https://files.pythonhosted.org/packages/47/8b/edbeed0332b18eaf229c03f9461315244a06a6fd6ad052fa0aa4254dc4d6/spylunking-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9c28d63914410720e38611000aeb6494", "sha256": "714be2c84d95295c22786f3b686ea6f9a45892fb9c9a6ada90b05fd51864844a" }, "downloads": -1, "filename": "spylunking-1.2.0.tar.gz", "has_sig": false, "md5_digest": "9c28d63914410720e38611000aeb6494", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39167, "upload_time": "2018-07-09T06:32:59", "url": "https://files.pythonhosted.org/packages/b6/c5/4deda37bf2f4a941192978558549e1dab8a19d2aa9653bcae2b56ada31d7/spylunking-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "2d1dcf2cf517c0b6752c0689d2216538", "sha256": "359fdf5f894bdfd2344e121345a514c6606633cde4f6113437f176233c5a8ab1" }, "downloads": -1, "filename": "spylunking-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2d1dcf2cf517c0b6752c0689d2216538", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 90865, "upload_time": "2018-11-02T00:03:07", "url": "https://files.pythonhosted.org/packages/3f/92/b20e788818c68cd06ee80d193beefb7d45f7e20958a6e84418a6c6f330d5/spylunking-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c9fbf8ede958408386580aefa65c4e1", "sha256": "6c93c26e2e432bb87199da757f4be66d31047387cb806e595dde6522d547baab" }, "downloads": -1, "filename": "spylunking-1.2.1.tar.gz", "has_sig": false, "md5_digest": "8c9fbf8ede958408386580aefa65c4e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57260, "upload_time": "2018-11-02T00:03:05", "url": "https://files.pythonhosted.org/packages/a2/ed/b78a42f8f7530e68f06a774ec2c87eee0548dd84e78e98d12416361b4d93/spylunking-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "c1cef4ac1599ccee65025a806ef20ff3", "sha256": "5e771a9a85c36bc6c8df33c0d4db1ce22d72ee39bfb99a91288792556cd865b9" }, "downloads": -1, "filename": "spylunking-1.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c1cef4ac1599ccee65025a806ef20ff3", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 90873, "upload_time": "2018-11-02T00:05:05", "url": "https://files.pythonhosted.org/packages/a2/18/e16d9b10877c199b375dd97df110c4f616c7569b08b58493273f219aa1e4/spylunking-1.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "47ff6ad8f5dc7cd0de09022ac60a4f54", "sha256": "0f0306cc46054291fd076bef90928b0bcf48b26db268aa204403ed22f1f243b4" }, "downloads": -1, "filename": "spylunking-1.2.2.tar.gz", "has_sig": false, "md5_digest": "47ff6ad8f5dc7cd0de09022ac60a4f54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57268, "upload_time": "2018-11-02T00:05:03", "url": "https://files.pythonhosted.org/packages/76/b8/e5022346209d953303f75477172560d549ae86c8b8ab5c6d1cc1f5542bc3/spylunking-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "577e238c2151f02b41c04903242374b7", "sha256": "9d8c6174019870d7953d91b0f29659534b8f872edc2a6564a23cb077df1d71e4" }, "downloads": -1, "filename": "spylunking-1.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "577e238c2151f02b41c04903242374b7", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 90871, "upload_time": "2018-11-02T00:09:04", "url": "https://files.pythonhosted.org/packages/b3/45/08ba3d95bbf5c5c877da680de399513e92ed4dbad860bf4398d98caaf58a/spylunking-1.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a0cda9bce9bf4aff377c77454584eb02", "sha256": "ab6962e31a0b404439c3f2f1f2dbd8d9ea4b4397708945f9efe013b0e01a4265" }, "downloads": -1, "filename": "spylunking-1.2.3.tar.gz", "has_sig": false, "md5_digest": "a0cda9bce9bf4aff377c77454584eb02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57263, "upload_time": "2018-11-02T00:09:02", "url": "https://files.pythonhosted.org/packages/aa/e5/a31706e88fd3eac0b912406def5b395e30ba69fca84cac301d69a94bcbfb/spylunking-1.2.3.tar.gz" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "b47b83614c5de7edb38c49b7698d83e0", "sha256": "74b4fe625885a6cb187b681fad19597aa7c7a92e2b4df6dd3bbcea8b93b08c96" }, "downloads": -1, "filename": "spylunking-1.2.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b47b83614c5de7edb38c49b7698d83e0", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 122379, "upload_time": "2018-11-02T02:20:14", "url": "https://files.pythonhosted.org/packages/02/5f/25fa688c57bbc7e388efa4e84db74935a69d13c9b390acbae5b05b3afe20/spylunking-1.2.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27fb7fcd20d3b6ecf7a88beb24b5ae43", "sha256": "619b87943e471170df5403a0e6d5a035a343d918ff7886b5f95941f5f2b05911" }, "downloads": -1, "filename": "spylunking-1.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "27fb7fcd20d3b6ecf7a88beb24b5ae43", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 65399, "upload_time": "2018-11-02T03:15:21", "url": "https://files.pythonhosted.org/packages/33/82/1f1e9123d99468f86b83589c2ddf8ebbaba5e39154802f3c51a9523cdc67/spylunking-1.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "53d04c055b1de2c96403236b98e1af72", "sha256": "1944824ccd52980df50b932df3e6312f527944ac2a200e43a6c4f337aa5b28ac" }, "downloads": -1, "filename": "spylunking-1.2.4.tar.gz", "has_sig": false, "md5_digest": "53d04c055b1de2c96403236b98e1af72", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57252, "upload_time": "2018-11-02T02:20:12", "url": "https://files.pythonhosted.org/packages/2d/f0/e2ec5feacced8b7764dcab784519ee73e50e760f9b8f129c99508bff5a84/spylunking-1.2.4.tar.gz" } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "1439e437b1a0f5303dbafd13aca56446", "sha256": "09a25b17a0aa83a095ff9f789b08314cb53ff90a252427775db5862cacdf711c" }, "downloads": -1, "filename": "spylunking-1.2.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1439e437b1a0f5303dbafd13aca56446", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 76569, "upload_time": "2018-11-02T03:15:23", "url": "https://files.pythonhosted.org/packages/ac/fd/47a66b16be8e0cee735ccbb809d479a199fc9df06e115b99c38fe015e1b0/spylunking-1.2.5-py2.py3-none-any.whl" } ], "1.2.6": [ { "comment_text": "", "digests": { "md5": "15e2db1d328e9c2dabf0184bd5ec0279", "sha256": "fe6cbd4dfb255b64ef0c97de4ca1af9dbc07f10031418a24dc77305a082df81b" }, "downloads": -1, "filename": "spylunking-1.2.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "15e2db1d328e9c2dabf0184bd5ec0279", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 65386, "upload_time": "2018-11-02T03:22:08", "url": "https://files.pythonhosted.org/packages/9d/84/a5e6e738ec52125b0582103e85c6fee691d143a2854660280de6140ed9ea/spylunking-1.2.6-py2.py3-none-any.whl" } ], "1.2.7": [ { "comment_text": "", "digests": { "md5": "411c75abafc14c42475dedaeaf274108", "sha256": "af04214a6a09252d6cac8574b110842a98063e82f98a984458517a77cd32a8ad" }, "downloads": -1, "filename": "spylunking-1.2.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "411c75abafc14c42475dedaeaf274108", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 65380, "upload_time": "2018-11-02T03:31:56", "url": "https://files.pythonhosted.org/packages/39/bb/183b890117da4b9d0f35785443630e6f98ce943aa2337163e888f1aff5ba/spylunking-1.2.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e53162956c15862150bdbaa11905de5", "sha256": "b1525ad5b64de4f9f3656808ce27456074527cd92462ad5e1b7e1ad21c67f3da" }, "downloads": -1, "filename": "spylunking-1.2.7.tar.gz", "has_sig": false, "md5_digest": "5e53162956c15862150bdbaa11905de5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56418, "upload_time": "2018-11-02T03:31:58", "url": "https://files.pythonhosted.org/packages/2f/1b/7d196ef9189151ceacd41db0cddfd2037046ec3fdc5cc347c6e6cdabb9c1/spylunking-1.2.7.tar.gz" } ], "1.2.8": [ { "comment_text": "", "digests": { "md5": "e9458e207bfd7849ae50f086f2498f58", "sha256": "155876b839b92d6b57074ed32a8767404bb16a17a37828c2057f8f7b52b22eb2" }, "downloads": -1, "filename": "spylunking-1.2.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e9458e207bfd7849ae50f086f2498f58", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 65383, "upload_time": "2018-11-02T04:15:03", "url": "https://files.pythonhosted.org/packages/d3/ca/290770787eca684d88e64539c74f5c3de76a576861369134f4ffaf8c9098/spylunking-1.2.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ba1be72d6f9df8dc11b7960ec4499fca", "sha256": "3464232368b22f67d5613811ea4bc7fb87b389eb62609afc7c4ac2360144e268" }, "downloads": -1, "filename": "spylunking-1.2.8.tar.gz", "has_sig": false, "md5_digest": "ba1be72d6f9df8dc11b7960ec4499fca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56423, "upload_time": "2018-11-02T04:15:05", "url": "https://files.pythonhosted.org/packages/1b/9e/9073a01522583795bbcdfe060d34e967aaad2d1a52beb15ec20dfe5297c8/spylunking-1.2.8.tar.gz" } ], "1.2.9": [ { "comment_text": "", "digests": { "md5": "c8d253e9b3ab50822425068256e0af78", "sha256": "401e354122aed1971dbd4bb5d110b545e9f8d327362dbb423fa08617f65d72c5" }, "downloads": -1, "filename": "spylunking-1.2.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c8d253e9b3ab50822425068256e0af78", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 65413, "upload_time": "2019-01-27T09:10:18", "url": "https://files.pythonhosted.org/packages/82/65/330f9b1621b79fec0fff26a21fb04c5339b4c515856381a924e3e9e22b3f/spylunking-1.2.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "773644903e00243c29acdd63f5241283", "sha256": "a7fc544b563efcbf46839e2a8717826d2e90ca408cea136a96ea881c86d7d79c" }, "downloads": -1, "filename": "spylunking-1.2.9.tar.gz", "has_sig": false, "md5_digest": "773644903e00243c29acdd63f5241283", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56470, "upload_time": "2019-01-27T09:10:20", "url": "https://files.pythonhosted.org/packages/c0/9b/5f19e8ed16f4531eedcb61d5432a5296a9d1900d06cdd4fe54ee7f481480/spylunking-1.2.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c8d253e9b3ab50822425068256e0af78", "sha256": "401e354122aed1971dbd4bb5d110b545e9f8d327362dbb423fa08617f65d72c5" }, "downloads": -1, "filename": "spylunking-1.2.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c8d253e9b3ab50822425068256e0af78", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 65413, "upload_time": "2019-01-27T09:10:18", "url": "https://files.pythonhosted.org/packages/82/65/330f9b1621b79fec0fff26a21fb04c5339b4c515856381a924e3e9e22b3f/spylunking-1.2.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "773644903e00243c29acdd63f5241283", "sha256": "a7fc544b563efcbf46839e2a8717826d2e90ca408cea136a96ea881c86d7d79c" }, "downloads": -1, "filename": "spylunking-1.2.9.tar.gz", "has_sig": false, "md5_digest": "773644903e00243c29acdd63f5241283", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56470, "upload_time": "2019-01-27T09:10:20", "url": "https://files.pythonhosted.org/packages/c0/9b/5f19e8ed16f4531eedcb61d5432a5296a9d1900d06cdd4fe54ee7f481480/spylunking-1.2.9.tar.gz" } ] }