{ "info": { "author": "KJ", "author_email": "jdotpy@users.noreply.github.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python :: 3" ], "description": "streamline\n============\n\nThe goal of this project is to make data acessible and actionable on the CLI. Streamline does this by implementing the utility functions necessary for taking an input stream and parallelizing work done on it.\n\nThe sequence of operations in an invocation:\n\n1. The \"Generator\" object loads entries from a source data stream (usually stdin).\n2. The \"Streamers\" selected are sequentially given each input value and are exepcted to filter and make modifications to those values and yield them for the next streamer.\n3. The \"Consumer\" object takes the entries yielded from the last streamer and usually outputs them for storage or viewing (usually stdout).\n\n## Installation\n\n* Requires Python 3.6+ and pip\n* `pip install streamline`\n\n## Guide\n\nThe simplest call specifies no streaming operations it just reads from stdin and writes to stdout exactly what was written:\n\n```bash\n $ printf \"foo\\nbar\" | streamline\n foo\n bar\n```\n\nBy default streamline takes input from stdin and writes to stdout. This is very flexible as it makes the tool composible with other CLI tools. However you can also use the `--input` and `--output` flags to control output. Lets assume that you have a file with the same data you just sent in with printf:\n\n```bash\n $ streamline --input my_source_file.txt --output my_target_file.txt\n $ cat my_target_file.txt\n foo\n bar\n```\n\nNow lets do something a little less useless. Lets use the \"shell\" streamer to execute a shell command for each entry and check if they're listening for https traffic:\n\n```bash\n $ printf \"www.google.com\\nslashdot.org\" | streamline -s shell -- \"nc -zv {value} 443\"\n {\"stdout\": \"\", \"stderr\": \"Connection to www.google.com 443 port [tcp/https] succeeded!\\n\", \"exit_code\": 0}\n {\"stdout\": \"\", \"stderr\": \"Connection to slashdot.org 443 port [tcp/https] succeeded!\\n\", \"exit_code\": 0}\n```\n\nStreamline modules aim to provide all the useful information in object form as output can then be customized with other streaming modules. For exampe, to take the above output and get just the exit code that tells us whether the port is open we can just add the `headers` streamer to prefix each output with the original input and the `extract` streamer (with its `--selector` option) option to set the value to the `exit_code` property of each result:\n\n```bash\n $ printf \"www.google.com\\nslashdot.org\" | streamline -s shell extract headers -- \"nc -zv {value} 443\" --selector exit_code\n www.google.com: 0\n slashdot.org: 0\n```\n\n## Built-in Modules\n\nThere are many modules available that do asynchronous jobs and transformations to input. To see all available modules use the main help option to list them with examples:\n\n```bash\n$ streamline --help\n\n=============== Streamline ===============\n\n\nusage: streamline [--generator GENERATOR] [--consumer CONSUMER]\n [-s [STREAMERS [STREAMERS ...]]] [-h]\n\noptional arguments:\n --generator GENERATOR\n Entry Generator Module\n --consumer CONSUMER Entry Consumer/Writer Module\n -s [STREAMERS [STREAMERS ...]], --streamers [STREAMERS [STREAMERS ...]]\n Additional streamers to apply (-s is optional)\n -h, --help Print help\n -p {buffer,stream-output,streaming}, --progress {buffer,stream-output,streaming}\n Print progress to stdout. (\"buffer\": buffers input and\n output, \"stream-output\" buffers only input, \"stream\"\n for no buffering at all)\n -w WORKERS, --workers WORKERS\n Number of concurrent workers for any one async\n execution module to have\n\n\n\n=============== Streamers ===============\n\n::extract::\n\tDescription: Change the value to an attribute of the current value\n\tExample: streamline -s extract -- --selector exit_code\n\n::py::\n\tDescription: Translate each value by assigning it to the result of a python expression\n\tExample: streamline -s py -- \"value.upper()\"\n\n::pyfilter::\n\tDescription: Filter out values that dont have a truthy result to a particular python expression\n\tExample: streamline -s pyfilter -- \"'foobar' in value\"\n\n::truthy::\n\tDescription: Filter out values that are not truthy\n\tExample: streamline -s truthy -- \n\n::noop::\n\tDescription: No operation. Just for testing.\n\tExample: streamline -s noop -- \n\n::split_list::\n\tDescription: Take any values that are an array and treat each value of an array as a separate input \n\tExample: streamline -s split_list -- \n\n::split::\n\tDescription: Take any values that are an array and treat each value of an array as a separate input \n\tExample: streamline -s split -- \n\n::breakdown::\n\tDescription: Show a report of how many input values ended up with a particular result value\n\tExample: streamline -s breakdown -- \n\n::headers::\n\tDescription: Force each value to a string and prefix each with the original input value\n\tExample: streamline -s headers -- \n\n::filter_out_errors::\n\tDescription: Filter out any entries that have produced an error\n\tExample: streamline -s filter_out_errors -- \n\n::errors::\n\tDescription: Use the latest error on the entry as the value\n\tExample: streamline -s errors -- \n\n::buffer::\n\tDescription: Hold entries in memory until a certain number is reached (give no args to buffer all)\n\tExample: streamline -s buffer -- --buffer 20\n\n::json::\n\tDescription: Take json strings and parse them into objects so other streamers can inspect attributes\n\tExample: streamline -s json -- \n\n::strip::\n\tDescription: Strip surrounding whitespace from each string entry, removing entries that are only whitespace\n\tExample: streamline -s strip -- --buffer 20\n\n::head::\n\tDescription: Only take the first X entries (Default 1)\n\tExample: streamline -s head -- --count 20\n\n::readfile::\n\tDescription: Read the file indicated by the file\n\tExample: streamline -s readfile -- --path ~/dir/{value}.json\n\n::combine::\n\tDescription: Combine two previous historical values by setting an attribute\n\tExample: streamline -s combine -- --source \"-1\" --target \"-2\"\n\n::http::\n\tDescription: Use a template to execute an HTTP request for each value\n\tExample: streamline -s http -- \"https://{value}/\"\n\n::ssh::\n\tDescription: Treat each value as a host to connect to. SSH in and run a command returning the output\n\tExample: streamline -s ssh -- \"uptime\"\n\n::ssh_exec::\n\tDescription: Copy a script to target machine and execute\n\tExample: streamline -s ssh_exec -- ~/dostuff.sh\n\n::shell::\n\tDescription: Run a shell command for each value\n\tExample: streamline -s shell -- \"nc -zv {value} 22\"\n\n::scp::\n\tDescription: Treat each value as a host to connect to. Copy a file to or from this host\n\tExample: streamline -s scp -- \"/tmp/file.txt\" \"{value}:/tmp/file.txt\"\n\n::sleep::\n\tDescription: Sleep for a second (or for {value} seconds) for each entry making no change to its value\n\tExample: streamline -s sleep -- \n\n::history:push::\n\tDescription: Start a new history tree\n\tExample: streamline -s history:push -- \n\n::history:pop::\n\tDescription: Walk back up one level in the history tree\n\tExample: streamline -s history:pop -- \n\n::history:collapse::\n\tDescription: Treat the latest value as the original\n\tExample: streamline -s history:collapse -- \n\n::history:reset::\n\tDescription: Clear all levels of history\n\tExample: streamline -s history:reset -- \n\n::history:values::\n\tDescription: Set the current value to a list of all previous values\n\tExample: streamline -s history:values -- \n\n```\n\nTo get available options for a particular module run (substituting \"http\" for the module you're interested in):\n\n```bash\nstreamline -s http --help\n```\n\n\n## YAML support\n\nYAML files defining the streamers and their options is supported. \n\nGiven the following yaml file:\n\n```yaml\nstreamers:\n -\n name: split\n -\n name: http\n output: code\n input: value\n target: status_code\n options:\n url: 'https://{value}'`\n```\n\nIt could be used to split a string of domains and get the http code for each one:\n\n```bash\n$ echo \"www.google.com www.slashdot.org\" | streamline -y http_codes.yaml\n{\"base\": \"www.google.com\", \"status_code\": 200}\n{\"base\": \"www.slashdot.org\", \"status_code\": 200}\n```\n\n\n\nYou can also specify the generator and consumer in the same way. Given the below yaml and csv file:\n```yaml\ngenerator:\n name: csv\n options:\n input: domains.csv\nconsumer:\n name: csv\nstreamers:\n -\n name: http\n output: code\n input: domain\n target: status_code\n options:\n url: 'https://{value}'\n```\n\n```\ndomain,label\nwww.google.com,The famous big B\nwww.slashdot.org,Mosh pit of opinions\n```\n\nYou can use it the following way:\n```bash\n$ streamline -y http_codes.yaml \ndomain,label,status_code\nwww.google.com,The famous big B,200\nwww.slashdot.org,Mosh pit of opinions,200\n```\n\n\n\n## Technical Vocabulary\n\n* Entry: A small wrapper around a value being passed along through the stream. Commonly a single line of input.\n* Generator: An asynchonous generator function that takes no input and yields Entry objects.\n* Executor: An asyncronous function that takes a single value and returns a new value. Usually some unit of work is done and the result of that work is returned as the new value.\n* Streamer: An asynchronous generator function that takes as an argument an asynchronous source iterable that yields Entry objects. Commonly streamers do some manipulation of each Entry it gets from the source iterable and then sets a new value on the entry.\n* Consumer: An asynchronous function that reads all entries of an asynchronous source iterable. Usually this function writes to some output (such as stdout).", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/jdotpy/streamline/tarball/master", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jdotpy/streamline", "keywords": "tools", "license": "", "maintainer": "", "maintainer_email": "", "name": "streamline", "package_url": "https://pypi.org/project/streamline/", "platform": "", "project_url": "https://pypi.org/project/streamline/", "project_urls": { "Download": "https://github.com/jdotpy/streamline/tarball/master", "Homepage": "https://github.com/jdotpy/streamline" }, "release_url": "https://pypi.org/project/streamline/1.0.1/", "requires_dist": null, "requires_python": "", "summary": "CLI tool for doing async tasks and transformations", "version": "1.0.1" }, "last_serial": 5600192, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "31e81569b9c41718495105e20ca22ed3", "sha256": "74adcd5ff4af50522d94552698c2cdb67ec2ea14cc246bcda999afc20496f753" }, "downloads": -1, "filename": "streamline-0.1.0.tar.gz", "has_sig": false, "md5_digest": "31e81569b9c41718495105e20ca22ed3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5824, "upload_time": "2018-12-27T23:00:53", "url": "https://files.pythonhosted.org/packages/a5/64/4e6f5fc32ee98c08fec504244c5f7ef439568e2ab640f2e64ef12039d9d0/streamline-0.1.0.tar.gz" } ], "0.10.0": [ { "comment_text": "", "digests": { "md5": "f78b08453c1bb2103fddb5a356fe46e6", "sha256": "68204a0ed17d44eb79f3da2c77facccaf29ae7f39b72f0e2c5ae21feeeb9851b" }, "downloads": -1, "filename": "streamline-0.10.0.tar.gz", "has_sig": false, "md5_digest": "f78b08453c1bb2103fddb5a356fe46e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17961, "upload_time": "2019-04-22T21:28:08", "url": "https://files.pythonhosted.org/packages/ae/43/c81a323e7049d17a8a00ab57845e76eae084f0c235dc0008070ba600dc3a/streamline-0.10.0.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "836e35ce90ae7a12f437100b91afe15c", "sha256": "b64369d1f2dfac846563566be87093b42c06dff40527f9f5a8aba1330631fc58" }, "downloads": -1, "filename": "streamline-0.11.0.tar.gz", "has_sig": false, "md5_digest": "836e35ce90ae7a12f437100b91afe15c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20953, "upload_time": "2019-06-20T14:38:21", "url": "https://files.pythonhosted.org/packages/68/de/71aae0581ef531e33fd4723a31f6e1dea38216afbb4510310d9cc9cf9ebf/streamline-0.11.0.tar.gz" } ], "0.2.00": [ { "comment_text": "", "digests": { "md5": "2b73059a7a4f26e0f9cc1ffd0839d3c8", "sha256": "3db891b45a342620382cb34c820ed1ee8a23265406b8f476a8308f0409acb06d" }, "downloads": -1, "filename": "streamline-0.2.00.tar.gz", "has_sig": false, "md5_digest": "2b73059a7a4f26e0f9cc1ffd0839d3c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7036, "upload_time": "2018-12-29T22:52:01", "url": "https://files.pythonhosted.org/packages/e4/b7/86d941458879a9fe91b8f133dac9743ab7970274eca5e285f2beb7624307/streamline-0.2.00.tar.gz" } ], "0.2.01": [ { "comment_text": "", "digests": { "md5": "4b44018bdd53f782b0fa088d7e3e5954", "sha256": "662d9a19a910dd07469925b8d9f6e7769172d7b44f55d953a6711411196ead04" }, "downloads": -1, "filename": "streamline-0.2.01.tar.gz", "has_sig": false, "md5_digest": "4b44018bdd53f782b0fa088d7e3e5954", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7709, "upload_time": "2018-12-31T19:46:05", "url": "https://files.pythonhosted.org/packages/65/58/031fddbceac5d0626303840577b384fe9663ee8e0c6b9bce19a77476a5f8/streamline-0.2.01.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "6daeabae32176c9de55e64c644222a41", "sha256": "900a6caa9dc94ab2974e105bd2380b9d4643c957136963a641c334e99038c582" }, "downloads": -1, "filename": "streamline-0.3.0.tar.gz", "has_sig": false, "md5_digest": "6daeabae32176c9de55e64c644222a41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7969, "upload_time": "2019-01-02T16:40:38", "url": "https://files.pythonhosted.org/packages/c4/e2/e39dc597fcb4faf997dfb0181fd72cde81261c77aca1d00f491938d834f7/streamline-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "4a8c58c48dbb277137701d9f382400d9", "sha256": "a84917b2ea4517c3e7d0b7fd4041bb4bff1372561da2a0754cd68078c0274bb5" }, "downloads": -1, "filename": "streamline-0.3.1.tar.gz", "has_sig": false, "md5_digest": "4a8c58c48dbb277137701d9f382400d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8876, "upload_time": "2019-01-02T18:21:26", "url": "https://files.pythonhosted.org/packages/15/11/773bbb76740f8d7c0c6db23be23869d094da13574bd28bfae669a180d6c4/streamline-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "9b7388909b9df0da8014eacc0e379e49", "sha256": "95616eafafbc83e3c20abdc2c3436179fff4cc820c6a8367fd76819e6286a52c" }, "downloads": -1, "filename": "streamline-0.3.2.tar.gz", "has_sig": false, "md5_digest": "9b7388909b9df0da8014eacc0e379e49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10435, "upload_time": "2019-01-02T18:26:20", "url": "https://files.pythonhosted.org/packages/b1/75/e207bbb41a5d410eff2885a3aaef7c15c40071b52833e2d76dbbefc941ea/streamline-0.3.2.tar.gz" } ], "0.3.3b0": [ { "comment_text": "", "digests": { "md5": "8f0a7543543bf838d22dd62234ed24f3", "sha256": "680822b15c211e8172063bca568a56bc2cb82a1807bc4e77b04b0eea6d925d2d" }, "downloads": -1, "filename": "streamline-0.3.3b0.tar.gz", "has_sig": false, "md5_digest": "8f0a7543543bf838d22dd62234ed24f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11020, "upload_time": "2019-01-02T18:33:34", "url": "https://files.pythonhosted.org/packages/ea/58/ee52b2dc677c70915811c821d4b1869fe04397a36bdfdd96228bd4cfcbd8/streamline-0.3.3b0.tar.gz" } ], "0.3.3rc0": [ { "comment_text": "", "digests": { "md5": "4714c3bdf0139ca7215131aa9a28ecac", "sha256": "cae6e580477f93603ee8b6334266565dc84dd41d56126ed55b11d82c65b10a73" }, "downloads": -1, "filename": "streamline-0.3.3rc0.tar.gz", "has_sig": false, "md5_digest": "4714c3bdf0139ca7215131aa9a28ecac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11019, "upload_time": "2019-01-02T18:36:24", "url": "https://files.pythonhosted.org/packages/d3/e3/68ffb15b9691b3cb38fa4e80f961f0036d7152252ef32038ec790e44f62b/streamline-0.3.3rc0.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "8e8071d03a80ecff9213e8295a027a0c", "sha256": "3b214cb4abf548ce10ea6407661d7a99218a06cead1d24a75515cde06883f325" }, "downloads": -1, "filename": "streamline-0.3.4.tar.gz", "has_sig": false, "md5_digest": "8e8071d03a80ecff9213e8295a027a0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11014, "upload_time": "2019-01-02T18:37:33", "url": "https://files.pythonhosted.org/packages/0a/9c/d9d08b5d38686794bc2080e9299d2c667774c5c3a4e250d27e8cc6118338/streamline-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "273e3699f245d07cbf77204e6c093606", "sha256": "9bc576c102efa50c7915177eabab55de39c6ef2bab845eb9f06b500ee5cd55ff" }, "downloads": -1, "filename": "streamline-0.3.5.tar.gz", "has_sig": false, "md5_digest": "273e3699f245d07cbf77204e6c093606", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11037, "upload_time": "2019-01-02T19:19:21", "url": "https://files.pythonhosted.org/packages/ea/66/ab3d6d5b61bdc35c7289420e6d6559c8bc9c5db982f98bd5deb9b6531066/streamline-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "b15dbbd8dbe888e4f99dd3fbcfb0aa77", "sha256": "ff849f5285edffcf68eb6ecf67623bc9f4d06a29b71db4940319f78ba3681d1c" }, "downloads": -1, "filename": "streamline-0.3.6.tar.gz", "has_sig": false, "md5_digest": "b15dbbd8dbe888e4f99dd3fbcfb0aa77", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11483, "upload_time": "2019-01-03T17:50:16", "url": "https://files.pythonhosted.org/packages/89/c3/26f231e35fc93d2303a647d8f3d0a39731ecbdeeab12d59c714ca875c08c/streamline-0.3.6.tar.gz" } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "35475c850c98767b6f396d50245f1441", "sha256": "d5c269171036411d83b8fee85acac15db30a6ace0a5c8e0987e6d0fefc6d0737" }, "downloads": -1, "filename": "streamline-0.3.7.tar.gz", "has_sig": false, "md5_digest": "35475c850c98767b6f396d50245f1441", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12171, "upload_time": "2019-01-03T18:31:18", "url": "https://files.pythonhosted.org/packages/1d/49/a3f08dae8f9f46ffde9ba8eae2c39a9d9ab0c840a7e533155a284bd60f48/streamline-0.3.7.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "a225dbcf1ce0fd8a7abd191c948712a5", "sha256": "5cc8aa714069af26c12e8a1340ff2b1d40b0fc3ccf05c7de92a4a3c83adc6de4" }, "downloads": -1, "filename": "streamline-0.4.0.tar.gz", "has_sig": false, "md5_digest": "a225dbcf1ce0fd8a7abd191c948712a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12384, "upload_time": "2019-01-03T19:32:37", "url": "https://files.pythonhosted.org/packages/9b/22/81078ac3b52b27b8304b2bea8a81996c2da5be95f27c9b672336afe2a3b4/streamline-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "6fb3107f76b35646df4a7b43c4d608ef", "sha256": "459c30c39330be4c302aeb3c4e73fe9b34b1268252ea7745567ddc61accb49f6" }, "downloads": -1, "filename": "streamline-0.5.0.tar.gz", "has_sig": false, "md5_digest": "6fb3107f76b35646df4a7b43c4d608ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12803, "upload_time": "2019-01-04T02:38:36", "url": "https://files.pythonhosted.org/packages/c7/cb/322d8afc2d3158f6cf49572063f3d41c41c806dcd8ee0cfb3cbee3cd3809/streamline-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "720719970e19570eacdc9c1234b7cb76", "sha256": "89cb95b96429993b3bda5d4befd132cc44f9b3fb7229fe59f774402d5ca494c3" }, "downloads": -1, "filename": "streamline-0.6.0.tar.gz", "has_sig": false, "md5_digest": "720719970e19570eacdc9c1234b7cb76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12555, "upload_time": "2019-01-04T14:38:29", "url": "https://files.pythonhosted.org/packages/95/44/ce0a26e1cf770a8f494ac08da23414b1970cddf86565de767628de98293c/streamline-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "1e7aa05a010ce1f3acb772d0ea08e940", "sha256": "ce15c2eca99dc098a02f75716de3406c73673e773efcded711e9d761f91b4a8f" }, "downloads": -1, "filename": "streamline-0.6.1.tar.gz", "has_sig": false, "md5_digest": "1e7aa05a010ce1f3acb772d0ea08e940", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12572, "upload_time": "2019-01-04T14:44:41", "url": "https://files.pythonhosted.org/packages/66/ef/3e352d8986793d4c3ea45e162b271bcfb1f41942d384db6c376fee935b4f/streamline-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "03d2be478694e649d366a14bafa2eb31", "sha256": "291cb01f14cb00b2d6b870c3875e139f8de99ebe6aa8740b1f7fde0a6f877336" }, "downloads": -1, "filename": "streamline-0.6.2.tar.gz", "has_sig": false, "md5_digest": "03d2be478694e649d366a14bafa2eb31", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12579, "upload_time": "2019-01-04T16:43:11", "url": "https://files.pythonhosted.org/packages/70/dc/8acac57093f65c8caeafeb39553aabb56ece7770251391d41287824f48bc/streamline-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "eb9b0e6b7046d143b33f2c9d774b259c", "sha256": "d3f7c3a88d43c6a239ae58d9e874c6986205353b3350b9198b85cc75cf74f98b" }, "downloads": -1, "filename": "streamline-0.6.3.tar.gz", "has_sig": false, "md5_digest": "eb9b0e6b7046d143b33f2c9d774b259c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12580, "upload_time": "2019-01-04T17:19:39", "url": "https://files.pythonhosted.org/packages/a9/55/57b811da4a1e439ff0600c6358017ed6f2ca00bf2162b8ecf238cb1c3694/streamline-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "f7f0e94c8c94a1eb97bd190d7632d91d", "sha256": "addaaaf82e27ce19521cd37cd2dc93c69748dbd4bbae8acded315876aa726139" }, "downloads": -1, "filename": "streamline-0.6.4.tar.gz", "has_sig": false, "md5_digest": "f7f0e94c8c94a1eb97bd190d7632d91d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12607, "upload_time": "2019-01-04T18:45:46", "url": "https://files.pythonhosted.org/packages/da/0e/df2bfc929a6750f48b689492a62f175e7891d3f2eff956e68c06e706aa3e/streamline-0.6.4.tar.gz" } ], "0.6.5": [ { "comment_text": "", "digests": { "md5": "8655f785d1409b9b8cbec7c0a867f8f0", "sha256": "56022c3594f85d3fe0a378a07078bf19af44e5132e998813ee526e36e8714986" }, "downloads": -1, "filename": "streamline-0.6.5.tar.gz", "has_sig": false, "md5_digest": "8655f785d1409b9b8cbec7c0a867f8f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13008, "upload_time": "2019-01-05T02:31:15", "url": "https://files.pythonhosted.org/packages/e6/89/8ca545d5b301b00882ef1afbfbf81cfa829f038dabc128b37f64d063b85f/streamline-0.6.5.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "7dd63f2d0e99f399b1fc028de78b5346", "sha256": "c63537b62d1de3cb81d7165e006057a0ef662488a588f6b096c527d4b401b772" }, "downloads": -1, "filename": "streamline-0.7.0.tar.gz", "has_sig": false, "md5_digest": "7dd63f2d0e99f399b1fc028de78b5346", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13296, "upload_time": "2019-01-05T03:17:11", "url": "https://files.pythonhosted.org/packages/bf/e4/9fee3dc3cc619f8e1942bfab240d8595cf3e895b14016216b5733fe2594c/streamline-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "c8256592ab322fd596defb4649369fe7", "sha256": "f1276a8f7ca0163f56724895d647156360b974dd4a0fdd6756b7c33deb58fd66" }, "downloads": -1, "filename": "streamline-0.7.1.tar.gz", "has_sig": false, "md5_digest": "c8256592ab322fd596defb4649369fe7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13404, "upload_time": "2019-01-07T20:42:15", "url": "https://files.pythonhosted.org/packages/6e/cc/c3317bd759e624a7d87ad4e865f10fafbfedfc678326dc40cf35b56c3891/streamline-0.7.1.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "4e64499f40f102e6c428e0c615a48631", "sha256": "1b142acda85fcb56e7f6059b7080e102390707fa837e3ef5c6c5075ad3846511" }, "downloads": -1, "filename": "streamline-0.8.0.tar.gz", "has_sig": false, "md5_digest": "4e64499f40f102e6c428e0c615a48631", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14247, "upload_time": "2019-01-15T22:16:48", "url": "https://files.pythonhosted.org/packages/61/d9/2e4f8a868a6b93b031fcc7e5352f4a64cf7f6fd8d2155a3f7a61c02071d5/streamline-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "18f2f23443bc5dfb3cc22187b213a8e4", "sha256": "7a1980d1b8a1e62b6659d4e14a4bb40a839b7b172640b6f2970228c1ba6ede45" }, "downloads": -1, "filename": "streamline-0.9.0.tar.gz", "has_sig": false, "md5_digest": "18f2f23443bc5dfb3cc22187b213a8e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15267, "upload_time": "2019-01-16T05:07:43", "url": "https://files.pythonhosted.org/packages/72/ca/93625096187d7c7be38386cbbc2bbd8b473cbf99ae7a9ce0ab6f3e0677ff/streamline-0.9.0.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "c39e183c5d4e349561e540114e610395", "sha256": "73255350acaee214e27867efb0926f2315644dc75ec1f52629bea30ac6ffb332" }, "downloads": -1, "filename": "streamline-0.9.1.tar.gz", "has_sig": false, "md5_digest": "c39e183c5d4e349561e540114e610395", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15335, "upload_time": "2019-01-16T15:56:18", "url": "https://files.pythonhosted.org/packages/4d/47/d35cfc8be8568c4f08dd232aafecc4351bae21b21b7849bd6c1193ac8b6f/streamline-0.9.1.tar.gz" } ], "0.9.10": [ { "comment_text": "", "digests": { "md5": "21c547905a00019e166177b58455da62", "sha256": "a6132ffd79cb11c0dc1a019ad0ba77176b29b139935d3da675d7e4106b0cbad8" }, "downloads": -1, "filename": "streamline-0.9.10.tar.gz", "has_sig": false, "md5_digest": "21c547905a00019e166177b58455da62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16952, "upload_time": "2019-02-11T19:54:42", "url": "https://files.pythonhosted.org/packages/fb/49/c41f1fe58698914c953928fd9e5d0f753edd6a3480ecaffadc426b8b4ea6/streamline-0.9.10.tar.gz" } ], "0.9.11": [ { "comment_text": "", "digests": { "md5": "3816e07185c5aa57a93788829c83121d", "sha256": "06ec436c7099ea4b7fa691ab57da9b32523a06ae1275817b6eaefc876f114aaa" }, "downloads": -1, "filename": "streamline-0.9.11.tar.gz", "has_sig": false, "md5_digest": "3816e07185c5aa57a93788829c83121d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16959, "upload_time": "2019-02-11T21:17:50", "url": "https://files.pythonhosted.org/packages/17/60/697230d5c3f53a8b032a3e843e56649c0734ba00af3c9b0b551eada39aa2/streamline-0.9.11.tar.gz" } ], "0.9.12": [ { "comment_text": "", "digests": { "md5": "ec0d6af623371ae7242ceebf032fec1b", "sha256": "df9f5abd11daf2e8d63b6827a66319cb7876b900164aad5f9d37419e4e7e1d15" }, "downloads": -1, "filename": "streamline-0.9.12.tar.gz", "has_sig": false, "md5_digest": "ec0d6af623371ae7242ceebf032fec1b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17014, "upload_time": "2019-02-14T17:27:38", "url": "https://files.pythonhosted.org/packages/9b/dc/fe238784d20d46ac8939d8fdfe4cc0a16a2aa03f587ed2bfc66d77358130/streamline-0.9.12.tar.gz" } ], "0.9.13": [ { "comment_text": "", "digests": { "md5": "a24a86c88d2c9ce0bcaee38e676113a6", "sha256": "44287617253d651b1f914fd11e0390a0b28eccdc252bc83b38d269ccc38bb199" }, "downloads": -1, "filename": "streamline-0.9.13.tar.gz", "has_sig": false, "md5_digest": "a24a86c88d2c9ce0bcaee38e676113a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17052, "upload_time": "2019-02-14T17:35:12", "url": "https://files.pythonhosted.org/packages/e6/15/06899e38c48a1936196f5890bf45d024703976411092c33b4e5b56256312/streamline-0.9.13.tar.gz" } ], "0.9.14": [ { "comment_text": "", "digests": { "md5": "a9a2e9b85de9ae3b4fbe0e91fbf81d8f", "sha256": "e7e9a8ac4900c6c3eb2f6e39c47cd5ef2841ec707184561e49ad0b4ec4f56587" }, "downloads": -1, "filename": "streamline-0.9.14.tar.gz", "has_sig": false, "md5_digest": "a9a2e9b85de9ae3b4fbe0e91fbf81d8f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17435, "upload_time": "2019-03-13T16:46:27", "url": "https://files.pythonhosted.org/packages/e2/37/996f2a84716a5475880089125144ae9539ac33e5ae94cf352aa242986a27/streamline-0.9.14.tar.gz" } ], "0.9.15": [ { "comment_text": "", "digests": { "md5": "499bbea539ef0f0a905d2d1f2d64524c", "sha256": "10d33c9347de086984ccfb9a471ce3d011c91c4a6c21487242ad6444dd24d184" }, "downloads": -1, "filename": "streamline-0.9.15.tar.gz", "has_sig": false, "md5_digest": "499bbea539ef0f0a905d2d1f2d64524c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17451, "upload_time": "2019-03-14T15:25:19", "url": "https://files.pythonhosted.org/packages/cd/bd/53b9ba41018ccf2e387380959cfacb3884088d1755b72a8f1098a3beb62b/streamline-0.9.15.tar.gz" } ], "0.9.16": [ { "comment_text": "", "digests": { "md5": "5e1eb5a23612b23ba0534b1b17aa0458", "sha256": "aee4cf35dfdff4e76b08f4430eeae2e7b8fa9879dd55515334bc2c58dc057f3e" }, "downloads": -1, "filename": "streamline-0.9.16.tar.gz", "has_sig": false, "md5_digest": "5e1eb5a23612b23ba0534b1b17aa0458", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17691, "upload_time": "2019-03-14T22:47:03", "url": "https://files.pythonhosted.org/packages/87/b9/3057b74b986360afdafdd8248d488765f3616ecbdee1277d366fbb45ddc1/streamline-0.9.16.tar.gz" } ], "0.9.17": [ { "comment_text": "", "digests": { "md5": "30e1a6b7f41ecd5adb89defa8f1131e6", "sha256": "1ca764d2e418fef9e02fd21afba56264d49cf697521c96490eba5d160ad5a3a0" }, "downloads": -1, "filename": "streamline-0.9.17.tar.gz", "has_sig": false, "md5_digest": "30e1a6b7f41ecd5adb89defa8f1131e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17696, "upload_time": "2019-03-16T01:06:11", "url": "https://files.pythonhosted.org/packages/fd/7d/fbe95f7840648ee4ef13466f538f814d0510b7038690d8a312af81d7fb64/streamline-0.9.17.tar.gz" } ], "0.9.18": [ { "comment_text": "", "digests": { "md5": "053524058f5ae8027f91d77c499ff940", "sha256": "df48d11ba2db186bdb7090f7314a29a8d57432f7cd262ad15013a035def1dc7e" }, "downloads": -1, "filename": "streamline-0.9.18.tar.gz", "has_sig": false, "md5_digest": "053524058f5ae8027f91d77c499ff940", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17744, "upload_time": "2019-03-18T02:44:14", "url": "https://files.pythonhosted.org/packages/8b/e5/f2d9975cb22b799e7613a81de285c246ca8961c6774581db0c89bffce83b/streamline-0.9.18.tar.gz" } ], "0.9.19": [ { "comment_text": "", "digests": { "md5": "1bf181f00b622eb99de037f06c22f223", "sha256": "4ebad54cad3eab88721a17b38d82ea98a006c017b33e78305bfca8327cecf007" }, "downloads": -1, "filename": "streamline-0.9.19.tar.gz", "has_sig": false, "md5_digest": "1bf181f00b622eb99de037f06c22f223", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17566, "upload_time": "2019-03-22T16:07:52", "url": "https://files.pythonhosted.org/packages/37/4f/c80c853081379b6cb51f157d94a53457427143f3c94b2a91fa0f9eb54721/streamline-0.9.19.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "d1c70df934f7e42841e8470a91c30ed3", "sha256": "155fd8baa77420bfa02851a4393e8ce064f9282e7980c90d9484ab7b82d9d21a" }, "downloads": -1, "filename": "streamline-0.9.2.tar.gz", "has_sig": false, "md5_digest": "d1c70df934f7e42841e8470a91c30ed3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15428, "upload_time": "2019-01-16T21:49:20", "url": "https://files.pythonhosted.org/packages/8a/c5/065c855b9b350edc344d34211a7a90dd91b93f51638c3f4353120ee6e6f6/streamline-0.9.2.tar.gz" } ], "0.9.20": [ { "comment_text": "", "digests": { "md5": "4df8407dbd4b7950a942084d4ea4b918", "sha256": "fdcaf3660a77d022b23baac37f6121181d33d39c0df7886cc3ff5a17d294c91a" }, "downloads": -1, "filename": "streamline-0.9.20.tar.gz", "has_sig": false, "md5_digest": "4df8407dbd4b7950a942084d4ea4b918", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17744, "upload_time": "2019-03-22T16:52:23", "url": "https://files.pythonhosted.org/packages/bf/04/5e783bbba18b28320a79910a2cba51b8f7f7411ff9ef573757d697d52afa/streamline-0.9.20.tar.gz" } ], "0.9.21": [ { "comment_text": "", "digests": { "md5": "2e6b9ea870ec0c07eb73250a01ffa1cb", "sha256": "ffd5cc53b3207e2b90ac2fe8f68d3839087867d0bee538d4bc5901de0e77f6fe" }, "downloads": -1, "filename": "streamline-0.9.21.tar.gz", "has_sig": false, "md5_digest": "2e6b9ea870ec0c07eb73250a01ffa1cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17745, "upload_time": "2019-03-23T01:43:33", "url": "https://files.pythonhosted.org/packages/ea/68/305b9e4f6cdaa141cbe58ecde360d6c21cf6dcb2543028cd6fcf4e49427a/streamline-0.9.21.tar.gz" } ], "0.9.22": [ { "comment_text": "", "digests": { "md5": "f61bcd5dab8fb978b41d5c33dd438bad", "sha256": "351d38587e8db69e38443b05e7341135d53987a5bf438c39dc5cd30bf65bbcbe" }, "downloads": -1, "filename": "streamline-0.9.22.tar.gz", "has_sig": false, "md5_digest": "f61bcd5dab8fb978b41d5c33dd438bad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17763, "upload_time": "2019-04-01T19:02:27", "url": "https://files.pythonhosted.org/packages/7c/4f/57a4c660ce7298fd5a9fbb9feb296c790b3806a89418ec1ba435df579313/streamline-0.9.22.tar.gz" } ], "0.9.23": [ { "comment_text": "", "digests": { "md5": "21e13e245d004276fd339f2adb7c654b", "sha256": "8f16b8c4b4fa73bb0cc2d8c5e377a154760458bdda019a6eae4e9058625ff2b8" }, "downloads": -1, "filename": "streamline-0.9.23.tar.gz", "has_sig": false, "md5_digest": "21e13e245d004276fd339f2adb7c654b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17754, "upload_time": "2019-04-11T14:27:24", "url": "https://files.pythonhosted.org/packages/39/01/6f19dd0ff85f788509f9469521d1b3b7dc7f8de281789af5df530ccb9b1d/streamline-0.9.23.tar.gz" } ], "0.9.24": [ { "comment_text": "", "digests": { "md5": "00f01d196ea0e1be4e286e37d9694bc1", "sha256": "ebd2b3e9d40c220e597f26bc8aa947319359b44ba07f9b473771c8444dd617d1" }, "downloads": -1, "filename": "streamline-0.9.24.tar.gz", "has_sig": false, "md5_digest": "00f01d196ea0e1be4e286e37d9694bc1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17840, "upload_time": "2019-04-12T16:06:03", "url": "https://files.pythonhosted.org/packages/1c/f1/c0b396b22736cc5c21a2b819c1ca069b26e099e4ca746566f056231bcf06/streamline-0.9.24.tar.gz" } ], "0.9.3": [ { "comment_text": "", "digests": { "md5": "757dfe1ea0d08cd3b647adc50bc855b6", "sha256": "21c181b83075ab1c86f3e77ad73c9fd05117e7eabc6f8e3dfe4910a49c5efbbe" }, "downloads": -1, "filename": "streamline-0.9.3.tar.gz", "has_sig": false, "md5_digest": "757dfe1ea0d08cd3b647adc50bc855b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15845, "upload_time": "2019-01-17T16:50:58", "url": "https://files.pythonhosted.org/packages/e7/79/8ac83abcf61c9fd1a7ff9492de68795626f6f3ae8aebe699ae688837789d/streamline-0.9.3.tar.gz" } ], "0.9.4": [ { "comment_text": "", "digests": { "md5": "ffb0e822d87a91f447154821184986f3", "sha256": "7ddedea70d0cf08a4d19d6a7d31f90e7e8d6dee8af7e9afecb358b4ba39b3614" }, "downloads": -1, "filename": "streamline-0.9.4.tar.gz", "has_sig": false, "md5_digest": "ffb0e822d87a91f447154821184986f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15839, "upload_time": "2019-01-18T19:02:12", "url": "https://files.pythonhosted.org/packages/ac/c8/018996a9acee52983f6ecc3551836732e6660625e970715c22f5bd39838f/streamline-0.9.4.tar.gz" } ], "0.9.5": [ { "comment_text": "", "digests": { "md5": "d97639ea25f19fdba1586073f7ecea81", "sha256": "24eb761d3ef2ffe8efb91b291c6d049bb10428593421a60e784c5a4955791fef" }, "downloads": -1, "filename": "streamline-0.9.5.tar.gz", "has_sig": false, "md5_digest": "d97639ea25f19fdba1586073f7ecea81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15804, "upload_time": "2019-01-21T17:31:38", "url": "https://files.pythonhosted.org/packages/fb/84/2b4950c9f8e853d62163d1a031bccba0941a98a984052424f6b0b98d878f/streamline-0.9.5.tar.gz" } ], "0.9.6": [ { "comment_text": "", "digests": { "md5": "53cd3b523d07f30882cec87147fb9928", "sha256": "b826e1f9b5b1051055e8ae2183c941fbdd4c5475f5b8f012346381d048685f5d" }, "downloads": -1, "filename": "streamline-0.9.6.tar.gz", "has_sig": false, "md5_digest": "53cd3b523d07f30882cec87147fb9928", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16378, "upload_time": "2019-01-23T19:43:43", "url": "https://files.pythonhosted.org/packages/86/ee/7a57e9dc07deda5e625fb51d51a4252573fb093924abc4d2168e365ddf01/streamline-0.9.6.tar.gz" } ], "0.9.7": [ { "comment_text": "", "digests": { "md5": "264b5369aa921ace6c9344285bffb8f0", "sha256": "1fd1b6919d703038bbcb8b3f829c0a629c8259944a76f4ae0489085b72917d4b" }, "downloads": -1, "filename": "streamline-0.9.7.tar.gz", "has_sig": false, "md5_digest": "264b5369aa921ace6c9344285bffb8f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16613, "upload_time": "2019-01-29T17:14:20", "url": "https://files.pythonhosted.org/packages/66/cd/5500b3e95e461398cda304f8fb9d95389ddf8f27ef9e76f8e1dc5bc8534c/streamline-0.9.7.tar.gz" } ], "0.9.8": [ { "comment_text": "", "digests": { "md5": "58c411c09569972eaa0952d6aaf7810d", "sha256": "34872c454725abd05f51efef76443162465fee15849f19e9468527d2e5a1dffc" }, "downloads": -1, "filename": "streamline-0.9.8.tar.gz", "has_sig": false, "md5_digest": "58c411c09569972eaa0952d6aaf7810d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16790, "upload_time": "2019-02-05T21:37:58", "url": "https://files.pythonhosted.org/packages/d4/b4/61c63e5ceedd6dcc1d8b0c9513d15c29a11336206cc50d62668ac7f7ef92/streamline-0.9.8.tar.gz" } ], "0.9.9": [ { "comment_text": "", "digests": { "md5": "7a2c80833239f917b2738107f97cccec", "sha256": "23a91b2d1b93bc5137fcbc4ca5143dbc1fabe6a546e659f7df4614b32e03fc78" }, "downloads": -1, "filename": "streamline-0.9.9.tar.gz", "has_sig": false, "md5_digest": "7a2c80833239f917b2738107f97cccec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16894, "upload_time": "2019-02-11T16:46:26", "url": "https://files.pythonhosted.org/packages/83/4c/7e5a1851509ac454a0cfe83fdd464151ad40c5da85f337fd1a8336d440a3/streamline-0.9.9.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "5e27d0b9e9f7add02d6723939c3e8d0c", "sha256": "81e950a636ddbaff2f67a18c957117ec7238c085803f840d16c39e707ead0782" }, "downloads": -1, "filename": "streamline-1.0.0.tar.gz", "has_sig": false, "md5_digest": "5e27d0b9e9f7add02d6723939c3e8d0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22874, "upload_time": "2019-06-20T15:06:12", "url": "https://files.pythonhosted.org/packages/63/5a/3a96f120f08de05787900b141f885beba896e41e983854922d309f4badd2/streamline-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "76648b2d001091e3db6a6c4d7e094b2b", "sha256": "2a577f62351075e6a7ca388c7075d7a6e36748aec8813ebe7d57315c1deaea2d" }, "downloads": -1, "filename": "streamline-1.0.1.tar.gz", "has_sig": false, "md5_digest": "76648b2d001091e3db6a6c4d7e094b2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23003, "upload_time": "2019-07-29T15:34:03", "url": "https://files.pythonhosted.org/packages/fd/f1/8e01f1a64311339103e6a4e5f66ab0d6c59651ee3ea43e9a7ba6439f96a1/streamline-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "76648b2d001091e3db6a6c4d7e094b2b", "sha256": "2a577f62351075e6a7ca388c7075d7a6e36748aec8813ebe7d57315c1deaea2d" }, "downloads": -1, "filename": "streamline-1.0.1.tar.gz", "has_sig": false, "md5_digest": "76648b2d001091e3db6a6c4d7e094b2b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23003, "upload_time": "2019-07-29T15:34:03", "url": "https://files.pythonhosted.org/packages/fd/f1/8e01f1a64311339103e6a4e5f66ab0d6c59651ee3ea43e9a7ba6439f96a1/streamline-1.0.1.tar.gz" } ] }