{ "info": { "author": "Salo Shp", "author_email": "support@salosh.org", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: System Administrators", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: System :: Distributed Computing" ], "description": "Nudnik\n======\n\nGoals\n-----\n\nAllow easy testing of load-balancing and failures in gRPC and REST based service-mesh\n\nFeatures\n--------\n\n - Rate limiting\n - Fake IO load from either client or server side\n - Export timing metrics to a file or InfluxDB with any custom formatting\n - \n\nQuick Start\n--------------------\n\n * Install Nudnik:\n```sh\n# Install package\npip install nudnik\n```\n\n * Run example Server:\n```shell\nnudnik --server\n```\n\n * Run a client that identifies itself as `barbaz`, fork to `2` threads, each sending `5` gRPC messages every `3` seconds.\n```shell\nnudnik --name barbaz --streams 2 --interval 3 --rate 5\n```\n\nDocker - Quick Start\n--------------------\n\n* Running on your local/remote docker daemon using docker-compose:\n `docker-compose up`\n\nUnder The Hood\n--------------\nThe server binds to the host:port that were specified, and listens to incoming gRPC messages.\nEvery message consists of several fields:\n - name: The name of the client, arbitrary string\n - stream_id: The stream id, the streams are numbered from `0` to whatever was configureed via the `streams` arg.\n - message_id: At every `interval`, the client sends `rate` messages, this id is an autoincrement index for that message.\n - ctime: The timestamp at which the request was created\n - rtime: The timestamp at which the request was retransmitted (0 if not applicapble)\n - rcount: The amount of times this message was retransmitted (0 if not applicapble)\n - meta: Just another string field that does nothing, you may send additional arbitrary data to increase message size or specify `random` to generate random data with every request\n - load: This field may be repeated several times, it instructs the server to create fake load of some sort before replying.\n\n Upon recieveing a message, the server will:\n - parse the `load` field\n - perform the required load\n - print a log message using the configured `out_format`\n - reply an `OK` to the client, also add the field `ptime`, which represents the time at which the request was parsed at the server,\n this allows the client to calculate exact RTT, even if NTP is not synchronized.\n\nLocal Development\n-----------------\nAs a rule of thumb wed'e recommend using virtualenv.\nRequirement are Python 3.7 + requirements.txt file\n\n * Clone and initialize Nudnik:\n```sh\n# Install python requirements\npip install grpcio grpcio-tools requests-unixsocket\n\n# Clone and configure the repository\ngit clone https://github.com/salosh/nudnik.git\ngit config --global push.default matching\ngit config --global user.name \"Your Name\"\ngit config --global user.email your.email@salosh.org\n\n# \"Compile\" the entity protobuf\ncd nudnik\npython -m grpc_tools.protoc --proto_path=./nudnik/ --python_out=./nudnik/ --grpc_python_out=./nudnik/ ./entity.proto\n```\n\nConfigure\n--------\n\n[Configuration](/nudnik/docs/configuration.md) documentation\n\n[Formatting](/nudnik/docs/formatting.md) documentation\n\n## Via `Nudnik` Command line args:\n```sh\nnudnik -h\nusage: nudnik [-h] [--config-file CONFIG_FILE] [--host HOST] [--port PORT]\n [--server] [--name NAME]\n [--name-mismatch-error {prefix,suffix,exact}] [--meta META]\n [--workers WORKERS] [--streams STREAMS]\n [--initial-stream-index INITIAL_STREAM_INDEX]\n [--interval INTERVAL] [--rate RATE] [--count COUNT]\n [--chaos CHAOS] [--load load_type load_value]\n [--retry-count RETRY_COUNT] [--fail-ratio FAIL_RATIO] [--ruok]\n [--metrics {stdout,file,influxdb,prometheus}]\n [--stats {stdout,file,influxdb,prometheus}] [--extra EXTRA]\n [--debug] [--verbose] [--version]\n\nNudnik - gRPC load tester\n\noptional arguments:\n -h, --help show this help message and exit\n --config-file CONFIG_FILE, -f CONFIG_FILE\n Path to YAML config file\n --host HOST, -H HOST host\n --port PORT, -p PORT port\n --server, -S Operation mode (default: client)\n --name NAME, -n NAME Parser name\n --name-mismatch-error {prefix,suffix,exact}\n Fail request on name mismatch (default: None)\n --meta META, -M META Send this extra data with every request\n --workers WORKERS, -w WORKERS\n Number of workers (Default: Count of CPU cores)\n --streams STREAMS, -s STREAMS\n Number of streams (Default: 1)\n --initial-stream-index INITIAL_STREAM_INDEX\n Calculate stream ID from this initial index (Default:\n 0)\n --interval INTERVAL, -i INTERVAL\n Number of seconds per stream message cycle (Default:\n 1)\n --rate RATE, -r RATE Number of messages per interval (Default: 10)\n --count COUNT, -C COUNT\n Count of total messages that should be sent (Default:\n 0 == unlimited)\n --chaos CHAOS, -c CHAOS\n Compute statistical process level random crashes [0,\n 3600/interval] (Default: 0)\n --load load_type load_value, -l load_type load_value\n Add artificial load [rtt, rttr, cpu, mem, cmd, fcmd]\n (Default: None)\n --retry-count RETRY_COUNT\n Number of times to re-send failed messages (Default:\n -1, which means infinite times)\n --fail-ratio FAIL_RATIO\n Percent of requests to intentionally fail (Default: 0)\n --ruok, -R Enable \"Are You OK?\" HTTP/1.1 API (default: False)\n --metrics {stdout,file,influxdb,prometheus}, -m {stdout,file,influxdb,prometheus}\n Enable metrics outputs (Default: None)\n --stats {stdout,file,influxdb,prometheus}, -t {stdout,file,influxdb,prometheus}\n Enable stats outputs (Default: None)\n --extra EXTRA, -e EXTRA\n Extra args (Default: None)\n --debug, -d Debug mode (default: False)\n --verbose, -v Verbose mode, specify multiple times for extra\n verbosity (default: None)\n --version, -V Display Nudnik version\n\n2018 (C) Salo Shp \n```\n\n## Via config file:\n```sh \nnano ./config.yml \n```\n\n# Getting started\nPlease refer to our [examples repository](https://github.com/salosh/nudnik-examples) for multiple guides and usage examples\n\n* * *\nVisit our website at https://salosh.org\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/salosh/nudnik.git", "keywords": "", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "nudnik", "package_url": "https://pypi.org/project/nudnik/", "platform": "", "project_url": "https://pypi.org/project/nudnik/", "project_urls": { "Homepage": "https://github.com/salosh/nudnik.git" }, "release_url": "https://pypi.org/project/nudnik/0.0.33/", "requires_dist": [ "PyYAML (>=5.1.1)", "etcd3 (>=0.8.1)", "grpcio (>=1.21.1)", "protobuf (>=3.8.0)", "requests-unixsocket (>=0.1.5)", "psutil (>=5.6.3)", "requests (>=2.22.0)" ], "requires_python": "", "summary": "gRPC load-balancing testing tool", "version": "0.0.33" }, "last_serial": 5539353, "releases": { "0.0.12": [ { "comment_text": "", "digests": { "md5": "b0478a8174e7252e4cf0b63516b02e89", "sha256": "b4d102ac704c9171993b9774cf7da9ada303d26af646104055bc5ea8f6d33ff8" }, "downloads": -1, "filename": "nudnik-0.0.12-py3-none-any.whl", "has_sig": false, "md5_digest": "b0478a8174e7252e4cf0b63516b02e89", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31031, "upload_time": "2018-12-01T22:08:03", "url": "https://files.pythonhosted.org/packages/97/85/916880be7a1374e4a95bd6618d980fb7d4250f61527ae6d337fcd6fbfcf0/nudnik-0.0.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "947bc7bb3ca1b955e9502f6d3438d968", "sha256": "fdac45aa0fb29681f7d5ce1132124835bf5ce7db51ed8c12a1bd77d96cb38d6e" }, "downloads": -1, "filename": "nudnik-0.0.12.tar.gz", "has_sig": false, "md5_digest": "947bc7bb3ca1b955e9502f6d3438d968", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28030, "upload_time": "2018-12-01T22:08:05", "url": "https://files.pythonhosted.org/packages/3c/d3/5b5613fd39a5e452acf1538e4f2bc9f436fefec3d05be789dd3ff0c7c3cc/nudnik-0.0.12.tar.gz" } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "934b3321eb0b5cd496bf3e65e58cb229", "sha256": "c3fcff92d7d5560bf0878e2b21bf18afdad9c30a90bb1925c48f041959fd99b0" }, "downloads": -1, "filename": "nudnik-0.0.14-py3-none-any.whl", "has_sig": false, "md5_digest": "934b3321eb0b5cd496bf3e65e58cb229", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33920, "upload_time": "2018-12-05T03:13:08", "url": "https://files.pythonhosted.org/packages/7c/3a/d57bc43a9ab38b54173b188aacfe11857f28a23c69cf34f9cf8beb2a34ac/nudnik-0.0.14-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d5774bfcfdb87599a1c9d274e3c6e716", "sha256": "ddd4c60b5432f54c6c0f2fe4357d7d04f06417af39e69eb3205e014086d90c95" }, "downloads": -1, "filename": "nudnik-0.0.14.tar.gz", "has_sig": false, "md5_digest": "d5774bfcfdb87599a1c9d274e3c6e716", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29430, "upload_time": "2018-12-05T03:13:10", "url": "https://files.pythonhosted.org/packages/fc/47/2c3aa8f4b6ea49da998c2cb31bb6c9dae829be2e9f04bce7ff7c801518d7/nudnik-0.0.14.tar.gz" } ], "0.0.15": [ { "comment_text": "", "digests": { "md5": "3206c98dd38ff730ae874d87f148476a", "sha256": "40c7dec582db8db5d8487dcd92526d059fe0cfef70b086127bd8939611a29f51" }, "downloads": -1, "filename": "nudnik-0.0.15-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3206c98dd38ff730ae874d87f148476a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34032, "upload_time": "2018-12-05T22:50:17", "url": "https://files.pythonhosted.org/packages/b8/bb/7f861cda0b5b8b0bd828044296cf8f5ee0e4bb250d6f1e441c3d7d08daac/nudnik-0.0.15-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "69c0800d14ca7e52f1ec1dc51f13b87a", "sha256": "ff4fbcbf3b23be88bdfe23c473bd75b7a01a730f2ce50747db44d936049e1c1a" }, "downloads": -1, "filename": "nudnik-0.0.15.tar.gz", "has_sig": false, "md5_digest": "69c0800d14ca7e52f1ec1dc51f13b87a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29634, "upload_time": "2018-12-05T22:50:21", "url": "https://files.pythonhosted.org/packages/04/db/987fdc3446249314e98c00ecd6a050bbe43f6acda8f86c61c880cf480c8b/nudnik-0.0.15.tar.gz" } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "6331c0f0e68203db0138df0ffcee629e", "sha256": "794821c3e504d1e19754db01426c8d038a616f2702a513c6bddd866eae508743" }, "downloads": -1, "filename": "nudnik-0.0.16-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6331c0f0e68203db0138df0ffcee629e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34026, "upload_time": "2018-12-06T00:12:36", "url": "https://files.pythonhosted.org/packages/2c/93/c04852e245a94f630913636b58e6952b5b5a0978c24c89972c6b263c0b8e/nudnik-0.0.16-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "60594e4ba7888dd7aaff7076b1220569", "sha256": "f1fcb4581edfe7af5b743638e6d04dd68da12412f7a2454fbd652e78e440292b" }, "downloads": -1, "filename": "nudnik-0.0.16.tar.gz", "has_sig": false, "md5_digest": "60594e4ba7888dd7aaff7076b1220569", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29633, "upload_time": "2018-12-06T00:12:38", "url": "https://files.pythonhosted.org/packages/11/03/c080b47f3ceb3b693c306c33e0a2960766ec92013e89979e81461436384f/nudnik-0.0.16.tar.gz" } ], "0.0.17": [ { "comment_text": "", "digests": { "md5": "50cc989a0fcb09ed9a978d8345bfa163", "sha256": "07ed8805b66b28f98fcd3b1a9769f6fe6bdbd1051281f86490f538ffe4a79b0b" }, "downloads": -1, "filename": "nudnik-0.0.17-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "50cc989a0fcb09ed9a978d8345bfa163", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34019, "upload_time": "2018-12-08T00:12:54", "url": "https://files.pythonhosted.org/packages/19/33/3e0945de0790e9dd0a1a3068d1baf280e36bc7551aa79d070a5624b63249/nudnik-0.0.17-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f41c5308be599e83b2f2e4f2941837a6", "sha256": "de77ee6b013e79b265003a6bac04c45a4fe93b2f686271c252963bcf9d5542b0" }, "downloads": -1, "filename": "nudnik-0.0.17.tar.gz", "has_sig": false, "md5_digest": "f41c5308be599e83b2f2e4f2941837a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29637, "upload_time": "2018-12-08T00:12:56", "url": "https://files.pythonhosted.org/packages/a3/3a/b1b637cfbbf8cd19d56e2778e6a38f299f0ead1d44dfccb1e2e30e4daaa7/nudnik-0.0.17.tar.gz" } ], "0.0.18": [ { "comment_text": "", "digests": { "md5": "5cb9133b6fef0e38a975d90d7df2a469", "sha256": "b3f0b0b9f775324422c4412a1dc19e9b312931054d8f7fca0286585e40a4eca8" }, "downloads": -1, "filename": "nudnik-0.0.18-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5cb9133b6fef0e38a975d90d7df2a469", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34374, "upload_time": "2018-12-12T03:56:07", "url": "https://files.pythonhosted.org/packages/fc/a2/30aa53b4a0f7744a6127a397b6c5cad3a30e99c703e057a2b6a9bfaaf41d/nudnik-0.0.18-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0d0656d69d5e461660d9a7d8f0938dc4", "sha256": "d16fa1d410a13ee296317fb9db16e67d932192af229e2a4c5240a2a3afc891f3" }, "downloads": -1, "filename": "nudnik-0.0.18.tar.gz", "has_sig": false, "md5_digest": "0d0656d69d5e461660d9a7d8f0938dc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30057, "upload_time": "2018-12-12T03:56:09", "url": "https://files.pythonhosted.org/packages/f8/4b/a7d848e17489962e0c13586599a432c0aa354bb35641da2d0c954b5551cf/nudnik-0.0.18.tar.gz" } ], "0.0.19": [ { "comment_text": "", "digests": { "md5": "e5c7f734755b9cd652c281e599524d94", "sha256": "2bcd8f16cebbf509fb87298c996cb608efea8ba799ddb5c77a809f8a2f2bd7c6" }, "downloads": -1, "filename": "nudnik-0.0.19-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e5c7f734755b9cd652c281e599524d94", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34505, "upload_time": "2018-12-12T17:15:05", "url": "https://files.pythonhosted.org/packages/83/b4/68de30ae7130f97b46c09267c963a4d533e6cd6f4c45da0509256ca98a2c/nudnik-0.0.19-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1482db74e8ef6650bd3dc3c9fcbbb523", "sha256": "ab894e16a93011304673955c1a495eda634257c303b416aa353039da6e96b16f" }, "downloads": -1, "filename": "nudnik-0.0.19.tar.gz", "has_sig": false, "md5_digest": "1482db74e8ef6650bd3dc3c9fcbbb523", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30596, "upload_time": "2018-12-12T17:15:07", "url": "https://files.pythonhosted.org/packages/47/50/e3c750e0893aa8e4660f8577dde89d189b7424821c6d9da45a25e048b685/nudnik-0.0.19.tar.gz" } ], "0.0.20": [ { "comment_text": "", "digests": { "md5": "c94a92cfe21a3fe53f4f56f431cd025b", "sha256": "5c61100ae741d26e4c14950976cc6c208a64c82f772bcbe7cb9491e5005ae8a4" }, "downloads": -1, "filename": "nudnik-0.0.20-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c94a92cfe21a3fe53f4f56f431cd025b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 34855, "upload_time": "2018-12-14T19:04:17", "url": "https://files.pythonhosted.org/packages/e9/5a/29961002d07865347ef8cd1baa0768d00e5770beb78c9e38f00d31add27e/nudnik-0.0.20-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5202bc4ddb0bddbfb718440244de6fb1", "sha256": "f168afcfa60af2fa9dbce88e592a77dcc6a8a09d45f21776e09016da701a8527" }, "downloads": -1, "filename": "nudnik-0.0.20.tar.gz", "has_sig": false, "md5_digest": "5202bc4ddb0bddbfb718440244de6fb1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30985, "upload_time": "2018-12-14T19:04:19", "url": "https://files.pythonhosted.org/packages/53/22/1fc0d44b7bca6384d71c0048b082b27e1959c9f794f417022f7cb2b89631/nudnik-0.0.20.tar.gz" } ], "0.0.21": [ { "comment_text": "", "digests": { "md5": "07d12015429b104bdf0882d79cb2ff34", "sha256": "720128e7c0c1ab5f6bfbcffef07253be770b7529e4a40c9d7bcbc48f2df488a4" }, "downloads": -1, "filename": "nudnik-0.0.21-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "07d12015429b104bdf0882d79cb2ff34", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35289, "upload_time": "2018-12-15T20:21:35", "url": "https://files.pythonhosted.org/packages/f0/6a/ba05732472015d14791ab45348c8b51b489ec04e776013c43189e49f27eb/nudnik-0.0.21-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "721b35977429772ff58793426fc7165e", "sha256": "3e87e98c8b0c41b83a4531ac4d2684d8d486b7e5ebb3613d88c08f87b0120fac" }, "downloads": -1, "filename": "nudnik-0.0.21.tar.gz", "has_sig": false, "md5_digest": "721b35977429772ff58793426fc7165e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31375, "upload_time": "2018-12-15T20:21:36", "url": "https://files.pythonhosted.org/packages/b0/24/a1d3c5b012c42e405d57f5f08ad7afbbdede96da990197acfbe8cf962bc9/nudnik-0.0.21.tar.gz" } ], "0.0.22": [ { "comment_text": "", "digests": { "md5": "59ff3786f73be2058e681a1690cc03e6", "sha256": "0233c978a6b12ed6b2e97839e5737bed4ad4a6ade2a87e231e72f7c7a4c9dc15" }, "downloads": -1, "filename": "nudnik-0.0.22-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "59ff3786f73be2058e681a1690cc03e6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38676, "upload_time": "2018-12-22T21:11:44", "url": "https://files.pythonhosted.org/packages/94/8f/9c322c3b9a90cb15cd54d9648e07fdd6559467b4130c4afa6619f5221cc8/nudnik-0.0.22-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9af67b58b2b2187b46b51361fb9a0b51", "sha256": "53ff5c4541ed5f05039b44863880b698ee4093301937c5407881ba75d8735654" }, "downloads": -1, "filename": "nudnik-0.0.22.tar.gz", "has_sig": false, "md5_digest": "9af67b58b2b2187b46b51361fb9a0b51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32688, "upload_time": "2018-12-22T21:11:46", "url": "https://files.pythonhosted.org/packages/ae/1a/8d044acf3cb53883cae0600a72eeee1756f908af28166c2e90dee6ff0344/nudnik-0.0.22.tar.gz" } ], "0.0.23": [ { "comment_text": "", "digests": { "md5": "0b9a4f9f2e18fe3eaf40812e3622470d", "sha256": "19dd8b22b1aa850777e762d279159b1b5f075667347cab9c3e14f9c3c118ff55" }, "downloads": -1, "filename": "nudnik-0.0.23-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "0b9a4f9f2e18fe3eaf40812e3622470d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38785, "upload_time": "2018-12-23T14:03:24", "url": "https://files.pythonhosted.org/packages/f4/b8/e362438e8e9f4054f70cd10c5fc5b9af9d37cc1ef1aac8896b1af4b08130/nudnik-0.0.23-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff0544a5bcbd963795008c8ee8f831bb", "sha256": "8845214ee2c87424cadc38d468ca083c188fa0d14838941fecd8a7d33d0c27a0" }, "downloads": -1, "filename": "nudnik-0.0.23.tar.gz", "has_sig": false, "md5_digest": "ff0544a5bcbd963795008c8ee8f831bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32715, "upload_time": "2018-12-23T14:03:27", "url": "https://files.pythonhosted.org/packages/06/75/48a2a3b8a32b2042fdacde9e053bf6c5b68763247cb58d737a876c795205/nudnik-0.0.23.tar.gz" } ], "0.0.24": [ { "comment_text": "", "digests": { "md5": "54c65131ce9a62085daa99a545218545", "sha256": "6b094325ffba972734d53a8af2a4802276b9c963109548ba0e7e385216d7db20" }, "downloads": -1, "filename": "nudnik-0.0.24-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "54c65131ce9a62085daa99a545218545", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 39401, "upload_time": "2018-12-30T19:53:06", "url": "https://files.pythonhosted.org/packages/7c/cf/b58efa3e2303ddbd8ed84b5c5885861df925111006505b62a69c8980b539/nudnik-0.0.24-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "787cb9aa789be6c357a9225f49314d42", "sha256": "b006bd47906922f721c51ca17e5f1743be15717a58683546af60b7db53472151" }, "downloads": -1, "filename": "nudnik-0.0.24.tar.gz", "has_sig": false, "md5_digest": "787cb9aa789be6c357a9225f49314d42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33232, "upload_time": "2018-12-30T19:53:08", "url": "https://files.pythonhosted.org/packages/d2/74/3fa4ed6842d85c53f19491784e6d215781d35ffba000b35474b53a2f3522/nudnik-0.0.24.tar.gz" } ], "0.0.25": [ { "comment_text": "", "digests": { "md5": "c0af60166afaf53e18788d0138cf4d03", "sha256": "0cde0fe746149e7589e782ecf93dd062dacd01c26cfa76e741fde26dcd30cdaf" }, "downloads": -1, "filename": "nudnik-0.0.25-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c0af60166afaf53e18788d0138cf4d03", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 39403, "upload_time": "2018-12-30T20:37:08", "url": "https://files.pythonhosted.org/packages/95/45/37b66dc236ebe2c1abdad9919e6901922b76680cd52b90c445097c554541/nudnik-0.0.25-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3a830881ea604ee14d909b88651a85e7", "sha256": "a6749973864740c7acbeaa9582af6505c757a11b9b878611d9f4969e9296016d" }, "downloads": -1, "filename": "nudnik-0.0.25.tar.gz", "has_sig": false, "md5_digest": "3a830881ea604ee14d909b88651a85e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33213, "upload_time": "2018-12-30T20:37:10", "url": "https://files.pythonhosted.org/packages/71/61/a952dedbd97cce8393b9ec363e55c2a10b98336b3541fd64841a60b68b5b/nudnik-0.0.25.tar.gz" } ], "0.0.26": [ { "comment_text": "", "digests": { "md5": "8875b7da5b23e71508126dfba7e2d891", "sha256": "6e7f93ff932af7597e63f4b389e7797a496291cd71304a4813d3e181d10284a8" }, "downloads": -1, "filename": "nudnik-0.0.26-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8875b7da5b23e71508126dfba7e2d891", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 39421, "upload_time": "2018-12-30T21:24:08", "url": "https://files.pythonhosted.org/packages/6d/66/8b7484b82fc4692731a62c65d4f7635a2f7d27fbc81e5804ec531e9e65d4/nudnik-0.0.26-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7b4cc31a0a6838cc6fbfd0ebb76ece12", "sha256": "8388ab85f9889aaa1c79fa4e60077ab811c5cb7244195f5f87121d8663e51800" }, "downloads": -1, "filename": "nudnik-0.0.26.tar.gz", "has_sig": false, "md5_digest": "7b4cc31a0a6838cc6fbfd0ebb76ece12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33235, "upload_time": "2018-12-30T21:24:10", "url": "https://files.pythonhosted.org/packages/23/12/922b217efb2a81979663eb7644c8339e7c0b02ca822960e75e6e3d030c5d/nudnik-0.0.26.tar.gz" } ], "0.0.27": [ { "comment_text": "", "digests": { "md5": "63dda606016b9a5424196fc39d770c5b", "sha256": "8d451b7189d9fe54a0fea9a0cc0cf895b6cdba62df3be7be19c84c04ad0ec3a2" }, "downloads": -1, "filename": "nudnik-0.0.27-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "63dda606016b9a5424196fc39d770c5b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 39988, "upload_time": "2019-01-28T23:23:41", "url": "https://files.pythonhosted.org/packages/db/a7/1f7fad790aef516e30fbe0fadb56dda18f422d8dd0738f8b0a4823b4c7f7/nudnik-0.0.27-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eb0e4f60082d06f0d5fb430fec9dbd7d", "sha256": "184a33ec470ca1900fa48f6ae526747e1cad348c13fb3d5a9c759a6854006338" }, "downloads": -1, "filename": "nudnik-0.0.27.tar.gz", "has_sig": false, "md5_digest": "eb0e4f60082d06f0d5fb430fec9dbd7d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33796, "upload_time": "2019-01-28T23:23:43", "url": "https://files.pythonhosted.org/packages/17/54/ff1c0d0002291495a0efd98681bda1549df206d850c67d652a547b44c13b/nudnik-0.0.27.tar.gz" } ], "0.0.28": [ { "comment_text": "", "digests": { "md5": "73145c012fb24b4994343c15c534d194", "sha256": "32f071e74d884677e913f16e553511e4a26bc59183a49029c4a4223e816f61d9" }, "downloads": -1, "filename": "nudnik-0.0.28-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "73145c012fb24b4994343c15c534d194", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 40902, "upload_time": "2019-01-30T23:20:46", "url": "https://files.pythonhosted.org/packages/3f/e8/a9c24a66d85309a7bafa4678c1b8422ad70c966e5e96995f8b2b4e8e364c/nudnik-0.0.28-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19a15c132269e66857f1272be5174d5e", "sha256": "d2fd4094d16090f045a237b4d28358baf381ac10ed2be5d6709d3bc08f502902" }, "downloads": -1, "filename": "nudnik-0.0.28.tar.gz", "has_sig": false, "md5_digest": "19a15c132269e66857f1272be5174d5e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33983, "upload_time": "2019-01-30T23:20:48", "url": "https://files.pythonhosted.org/packages/de/df/cbb6126a309da8bd75c9287752978ae4ff39785bcc59071672b2c5969d85/nudnik-0.0.28.tar.gz" } ], "0.0.29": [ { "comment_text": "", "digests": { "md5": "ef7571bea1f929771ab1d6ba543cc0f2", "sha256": "8ee424080a4966e30967af58f86c1221539bd53a57629b4d8244b9ffe71c9e97" }, "downloads": -1, "filename": "nudnik-0.0.29-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ef7571bea1f929771ab1d6ba543cc0f2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42497, "upload_time": "2019-02-07T22:49:40", "url": "https://files.pythonhosted.org/packages/6b/ef/7c3d8c1e55e971a00ce4d9cbcde85948170f1bdf10e613389fa7a6abb61b/nudnik-0.0.29-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ca0a31afd172214363e240f1ac7aaf5f", "sha256": "b22627ef558f168a6963b5e932fc697ac7ee6ece0206410aab76018afbbfc2d7" }, "downloads": -1, "filename": "nudnik-0.0.29.tar.gz", "has_sig": false, "md5_digest": "ca0a31afd172214363e240f1ac7aaf5f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34715, "upload_time": "2019-02-07T22:49:43", "url": "https://files.pythonhosted.org/packages/21/7a/24621713e3d5ae9d59cfb2ba9801e49021b91ce53c618e699ec7683f91ec/nudnik-0.0.29.tar.gz" } ], "0.0.30": [ { "comment_text": "", "digests": { "md5": "575edeb267a543460069bd51b1d33217", "sha256": "7aa6c548b7be0167f0764565d2439ce5de7ed58c2c86122596b6a823b193be6e" }, "downloads": -1, "filename": "nudnik-0.0.30-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "575edeb267a543460069bd51b1d33217", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 42495, "upload_time": "2019-06-23T11:15:31", "url": "https://files.pythonhosted.org/packages/f1/c4/225476fc90950420bf669a1c96a72ce1829814fef5f137532b607f6325a2/nudnik-0.0.30-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c55ac786890f2a509c643711b1601cfd", "sha256": "c5ed7d5e53e44be019d506171e0d0e9392d333071751ef6cc721834ffea60b6f" }, "downloads": -1, "filename": "nudnik-0.0.30.tar.gz", "has_sig": false, "md5_digest": "c55ac786890f2a509c643711b1601cfd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34729, "upload_time": "2019-06-23T11:15:33", "url": "https://files.pythonhosted.org/packages/98/6d/b5909ead95886d4adadaf06aeb8d06a7cea15c263b8b88433db4446b2d8a/nudnik-0.0.30.tar.gz" } ], "0.0.32": [ { "comment_text": "", "digests": { "md5": "3950ea7ac95888d0b569340a913d04a9", "sha256": "28ca37b1eaf77a6e014170d835f048ed32888f917706545f3739b243adbbd5cb" }, "downloads": -1, "filename": "nudnik-0.0.32-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3950ea7ac95888d0b569340a913d04a9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 45511, "upload_time": "2019-07-15T12:21:02", "url": "https://files.pythonhosted.org/packages/5f/4f/484195268f6cebdcff92c2a27b8d760e7f66c16d207d88cfd0a80da04506/nudnik-0.0.32-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cb214061d42db08a8c4d86a476d557c2", "sha256": "44aff026fc585660cd6e9351aab0c13eba734bd1dbeb28c4905f4f10f1952cd7" }, "downloads": -1, "filename": "nudnik-0.0.32.tar.gz", "has_sig": false, "md5_digest": "cb214061d42db08a8c4d86a476d557c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36547, "upload_time": "2019-07-15T12:21:04", "url": "https://files.pythonhosted.org/packages/43/b9/600904c282c3a03c12f5ff930d6ef9a9a7169a597f59459cac3245bd8de7/nudnik-0.0.32.tar.gz" } ], "0.0.33": [ { "comment_text": "", "digests": { "md5": "81088db8fe7e326c7f613737b1335a75", "sha256": "72f91e7e0a42329841e9afe0f568ebb3d7fc8d7aa164b14413973c985cb07a14" }, "downloads": -1, "filename": "nudnik-0.0.33-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "81088db8fe7e326c7f613737b1335a75", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 45590, "upload_time": "2019-07-16T09:10:22", "url": "https://files.pythonhosted.org/packages/e2/ae/01f46c294fa95c7d67dc0eac9e5d5187dacb0a1e6e6961398f53803b365a/nudnik-0.0.33-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f8696df747e652efc86398b867f86eb1", "sha256": "2a6df7d97c4f32fa5ef063c39d99da5c8ec55c0269668cf30c7addc8b77b8ce8" }, "downloads": -1, "filename": "nudnik-0.0.33.tar.gz", "has_sig": false, "md5_digest": "f8696df747e652efc86398b867f86eb1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36653, "upload_time": "2019-07-16T09:10:24", "url": "https://files.pythonhosted.org/packages/0a/74/18f8bbf6c02002b7db94c04a85c2f824a7a291bbeae246ec77ff7caa12ff/nudnik-0.0.33.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "5d65dccb1ad3509142334b7d7bc37532", "sha256": "68c7d87fa6935f9c6e5f6113d5280a09b3dfd4b3ec76f89b99e16e60c557efdb" }, "downloads": -1, "filename": "nudnik-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "5d65dccb1ad3509142334b7d7bc37532", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.3", "size": 28231, "upload_time": "2018-11-24T23:22:45", "url": "https://files.pythonhosted.org/packages/7f/34/5ed07f2bce1c627917a7ce82d73b89f35d81e4d65dff2261fa47f6d447fb/nudnik-0.0.4-py3-none-any.whl" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "84c3e21b25da802bb449568e85619d76", "sha256": "dd2929aaff87313c2c28b70f2dc6f5afd84c3d6eb95aa59592de66d3b5a69cbb" }, "downloads": -1, "filename": "nudnik-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "84c3e21b25da802bb449568e85619d76", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.3", "size": 28266, "upload_time": "2018-11-25T11:38:00", "url": "https://files.pythonhosted.org/packages/1b/03/b73311c5537276e2adedab59df0fa7c6c8ed811183e57216f64eb15ad556/nudnik-0.0.5-py3-none-any.whl" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "2e9aeef4b0002f1489a4e7404e9b50ba", "sha256": "cde678f6df2e9b608dd0ed6ffcc615f41d6cde9aad23fee98b4747aa14275439" }, "downloads": -1, "filename": "nudnik-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "2e9aeef4b0002f1489a4e7404e9b50ba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.3", "size": 28261, "upload_time": "2018-11-25T11:57:31", "url": "https://files.pythonhosted.org/packages/ad/0b/e36492a1f35f182dd4b2792b53d7d63789b962015dd361f62e9531465857/nudnik-0.0.6-py3-none-any.whl" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "2dfa5866f6bad14f1c679aa23f7b5fd0", "sha256": "b3fce4013bddcd1612518cab6eda68adb2364d8bbd442f7de8d7a2f09f1cf4a2" }, "downloads": -1, "filename": "nudnik-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "2dfa5866f6bad14f1c679aa23f7b5fd0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.3", "size": 29579, "upload_time": "2018-11-26T01:12:18", "url": "https://files.pythonhosted.org/packages/50/95/91dbfa4cc65629ee69ea52977e68020d34a3906ac855943d2eba73987afe/nudnik-0.0.7-py3-none-any.whl" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "87e423a55e9ab4babd13fb8438a388ea", "sha256": "bd3cea24e65cd6bdae97b91d8bd9efce776fa40f82d5117a64adca4fc83017db" }, "downloads": -1, "filename": "nudnik-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "87e423a55e9ab4babd13fb8438a388ea", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.3", "size": 30266, "upload_time": "2018-11-27T00:17:03", "url": "https://files.pythonhosted.org/packages/f4/0d/d58461618c79dce9da098a5c8e09961196542cef3cd70c5275e4e8cde864/nudnik-0.0.8-py3-none-any.whl" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "5ff1707e75b1824846602d6866e95d24", "sha256": "04de03d40cf7697283451aa377979843afe61aaeecb3daaa7db449dda124f6f4" }, "downloads": -1, "filename": "nudnik-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "5ff1707e75b1824846602d6866e95d24", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.3", "size": 30550, "upload_time": "2018-11-28T00:27:41", "url": "https://files.pythonhosted.org/packages/1a/34/005b89e072d08a75291670c7d0ad5aa07ddcb1e82b8610e2cc133de3ea64/nudnik-0.0.9-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "81088db8fe7e326c7f613737b1335a75", "sha256": "72f91e7e0a42329841e9afe0f568ebb3d7fc8d7aa164b14413973c985cb07a14" }, "downloads": -1, "filename": "nudnik-0.0.33-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "81088db8fe7e326c7f613737b1335a75", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 45590, "upload_time": "2019-07-16T09:10:22", "url": "https://files.pythonhosted.org/packages/e2/ae/01f46c294fa95c7d67dc0eac9e5d5187dacb0a1e6e6961398f53803b365a/nudnik-0.0.33-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f8696df747e652efc86398b867f86eb1", "sha256": "2a6df7d97c4f32fa5ef063c39d99da5c8ec55c0269668cf30c7addc8b77b8ce8" }, "downloads": -1, "filename": "nudnik-0.0.33.tar.gz", "has_sig": false, "md5_digest": "f8696df747e652efc86398b867f86eb1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36653, "upload_time": "2019-07-16T09:10:24", "url": "https://files.pythonhosted.org/packages/0a/74/18f8bbf6c02002b7db94c04a85c2f824a7a291bbeae246ec77ff7caa12ff/nudnik-0.0.33.tar.gz" } ] }