{ "info": { "author": "Florian Sellmayr", "author_email": "florian.sellmayr@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Security", "Topic :: Software Development :: Code Generators", "Topic :: System :: Systems Administration", "Topic :: Utilities" ], "description": "TrailScraper\n============\n\n|PyPi Release| |Build Status|\n\nA command-line tool to get valuable information out of AWS CloudTrail\nand a general purpose toolbox for working with IAM policies\n\nInstallation\n------------\n\n.. code:: bash\n\n $ pip install trailscraper\n\nUsage\n-----\n\n- `Download some logs (including us-east-1 for global aws\n services) <#download-some-logs-including-us-east-1-for-global-aws-services>`__\n- `Find CloudTrail events matching a filter\n (>=0.5.0) <#find-cloudtrail-events-matching-a-filter-050>`__\n- `Generate Policy from some CloudTrail records\n (>=0.5.0) <#generate-policy-from-some-cloudtrail-records-050>`__\n- `Extend existing policy by guessing matching\n actions <#extend-existing-policy-by-guessing-matching-actions>`__\n- `Find CloudTrail events and generate an IAM Policy\n (>=0.5.0) <#find-cloudtrail-events-and-generate-an-iam-policy-050>`__\n- `Find CloudTrail events and generate an IAM Policy\n (<0.5.0) <#find-cloudtrail-events-and-generate-an-iam-policy-050-1>`__\n ### Download some logs (including us-east-1 for global aws services)\n\n::\n\n $ trailscraper download --bucket some-bucket \\\n --account-id some-account-id \\\n --region some-other-region \\ \n --region us-east-1 \\\n --from 'two days ago' \\\n --to 'now' \\\n\nFind CloudTrail events matching a filter (>=0.5.0)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n $ trailscraper select --filter-assumed-role-arn some-arn \\ \n --from 'one hour ago' \\ \n --to 'now'\n {\n \"Records\": [\n {\n \"eventTime\": \"2017-12-11T15:01:51Z\",\n \"eventSource\": \"autoscaling.amazonaws.com\",\n \"eventName\": \"DescribeLaunchConfigurations\",\n ...\n\nGenerate Policy from some CloudTrail records (>=0.5.0)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n $ gzcat some-records.json.gz | trailscraper generate\n {\n \"Statement\": [\n {\n \"Action\": [\n \"ec2:DescribeInstances\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"*\"\n ]\n }\n ],\n \"Version\": \"2012-10-17\"\n } \n\nExtend existing policy by guessing matching actions\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nCloudTrail logs might not always contain all relevant actions. For\nexample, your logs might only contain the ``Create`` actions after a\nterraform run when you really want the delete and update permissions as\nwell. TrailScraper can try to guess additional statements that might be\nrelevant:\n\n::\n\n $ cat minimal-policy.json | trailscraper guess\n {\n \"Statement\": [\n {\n \"Action\": [\n \"s3:PutObject\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"*\"\n ]\n },\n {\n \"Action\": [\n \"s3:DeleteObject\",\n \"s3:GetObject\",\n \"s3:ListObjects\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"*\"\n ]\n }\n ],\n \"Version\": \"2012-10-17\"\n }\n $ cat minimal-policy.json | ./go trailscraper guess --only Get\n {\n \"Statement\": [\n {\n \"Action\": [\n \"s3:PutObject\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"*\"\n ]\n },\n {\n \"Action\": [\n \"s3:GetObject\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"*\"\n ]\n }\n ],\n \"Version\": \"2012-10-17\"\n }\n\nFind CloudTrail events and generate an IAM Policy (>=0.5.0)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n $ trailscraper select | trailscraper generate\n {\n \"Statement\": [\n {\n \"Action\": [\n \"ec2:DescribeInstances\",\n \"ec2:DescribeSecurityGroups\",\n \"ec2:DescribeSubnets\",\n \"ec2:DescribeVolumes\",\n \"ec2:DescribeVpcs\",\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"*\"\n ]\n },\n {\n \"Action\": [\n \"sts:AssumeRole\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"arn:aws:iam::1111111111:role/someRole\"\n ]\n }\n ],\n \"Version\": \"2012-10-17\"\n } \n\n.. find-cloudtrail-events-and-generate-an-iam-policy-0.5.0-1:\n\nFind CloudTrail events and generate an IAM Policy (<0.5.0)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n::\n\n $ trailscraper generate-policy\n {\n \"Statement\": [\n {\n \"Action\": [\n \"ec2:DescribeInstances\",\n \"ec2:DescribeSecurityGroups\",\n \"ec2:DescribeSubnets\",\n \"ec2:DescribeVolumes\",\n \"ec2:DescribeVpcs\",\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"*\"\n ]\n },\n {\n \"Action\": [\n \"sts:AssumeRole\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": [\n \"arn:aws:iam::1111111111:role/someRole\"\n ]\n }\n ],\n \"Version\": \"2012-10-17\"\n } \n\nFAQ\n---\n\nHow can I generate policies in CloudFormation YAML instead of JSON?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTrailScraper doesn\u2019t provide this. But you can use\n`cfn-flip `__ to do\nit:\n\n::\n\n $ trailscraper select | trailscraper generate | cfn-flip\n Statement:\n - Action:\n - ec2:DescribeInstances\n Effect: Allow\n Resource:\n - '*'\n\nHow can I generate policies in Terraform HCL instead of JSON?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTrailScraper doesn\u2019t provide this. But you can use\n`iam-policy-json-to-terraform `__\nto do it:\n\n::\n\n $ trailscraper select | trailscraper generate | iam-policy-json-to-terraform\n data \"aws_iam_policy_document\" \"policy\" {\n statement {\n sid = \"\"\n effect = \"Allow\"\n resources = [\"*\"]\n\n actions = [\n \"ec2:DescribeInstances\",\n ]\n }\n }\n\nWhy is TrailScraper missing some events?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n- Make sure you have logs for the ``us-east-1`` region. Some global AWS\n services (e.g.\u00a0Route53, IAM, STS, CloudFront) use this region. For\n details, check the `CloudTrail\n Documentation `__\n\nWhy are some TrailScraper-generated actions not real IAM actions?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis is totally possible. Unfortunately, there is no good,\nmachine-readable documentation on how CloudTrail events map to IAM\nactions so TrailScraper is using heuristics to figure out the right\nactions. These heuristics likely don\u2019t cover all special cases of the\nAWS world.\n\nThis is where you come in: If you find a special case that\u2019s not covered\nby TrailScraper, please `open a new\nissue `__ or, even\nbetter, submit a pull request.\n\nFor more details, check out the `contribution\nguide <./CONTRIBUTING.md>`__\n\nWhy does click think I am in an ASCII environment?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n``Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment.``\n\nSet environment variables that describe your locale, e.g. :\n\n::\n\n export LC_ALL=de_DE.utf-8\n export LANG=de_DE.utf-8\n\nor\n\n::\n\n LC_ALL=C.UTF-8\n LANG=C.UTF-8\n\nFor details, see\nhttp://click.pocoo.org/5/python3/#python-3-surrogate-handling\n\nDevelopment\n-----------\n\n.. code:: bash\n\n $ ./go setup # set up venv, dependencies and tools\n $ ./go test # run some tests\n $ ./go check # run some style checks\n $ ./go # let's see what we can do here\n\n.. |PyPi Release| image:: https://img.shields.io/pypi/v/trailscraper.svg\n :target: https://pypi.python.org/pypi/trailscraper\n.. |Build Status| image:: https://travis-ci.org/flosell/trailscraper.svg?branch=master\n :target: https://travis-ci.org/flosell/trailscraper\n\n\nChangelog\n=========\n\nThis changelog contains a loose collection of changes in every release\nincluding breaking changes to the API.\n\nThe format is based on `Keep a Changelog `__\n\n0.5.1\n-----\n\nAdded\n~~~~~\n\n- New command ``guess`` to extend existing policy by guessing matching\n actions #22\n\nFixed\n~~~~~\n\n- Fixed parsing events that contain resources without an ARN (e.g.\n ``s3:ListObjects``) #51\n\n.. section-1:\n\n0.5.0\n-----\n\n**Breaking CLI changes**: split up ``generate-policy`` into ``select``\nand ``generate`` (#38)\n\n.. added-1:\n\nAdded\n~~~~~\n\n- New command ``select`` to print all CloudTrail records matching a\n filter to stdout\n- New command ``generate`` to take CloudTrail records from stdin and\n generate a policy for it\n\nChanged\n~~~~~~~\n\n- New command ``select`` defaults to not filtering at all whereas\n ``generate-policy`` filtered for recent events by default. Changed to\n make filtering more explicit and predictable instead of surprising\n users who wonder why their events don\u2019t show up\n\nRemoved\n~~~~~~~\n\n- Removed command ``generate-policy``, replaced with ``select`` and\n ``generate``. Use pipes to produce the same behavior:\n\n .. code:: bash\n\n $ trailscraper select | trailscraper generate\n\n.. section-2:\n\n0.4.4\n-----\n\n.. fixed-1:\n\nFixed\n~~~~~\n\n- Made trailscraper timezone-aware. Until now, trailscraper implicitly\n treated everything as UTC, meaning relative timestamps (e.g. ``now``,\n ``two hours ago``) didn\u2019t work properly when filtering logfiles to\n download or records to generate from. (#39)\n\n.. added-2:\n\nAdded\n~~~~~\n\n- New command ``trailscraper last-event-timestamp`` to get the last\n known event timestamp.\n- New flag ``trailscraper download --wait`` to wait until events for\n the specified timeframe are found. Useful if you are waiting for\n CloudTrail to ship logs for a recent operation.\n\n.. section-3:\n\n0.4.3\n-----\n\n*skipped because of release-problems*\n\n.. section-4:\n\n0.4.2\n-----\n\n.. fixed-2:\n\nFixed\n~~~~~\n\n- Fixed various special cases in mapping CloudTrail to IAM Actions:\n\n - API Gateway\n - App Stream 2\n - DynamoDB Streams\n - Lex\n - Mechanical Turk\n - S3\n - STS\n - Tagging\n\n.. section-5:\n\n0.4.1\n-----\n\n.. fixed-3:\n\nFixed\n~~~~~\n\n- Ignore record files that can\u2019t be read (e.g.\u00a0not valid GZIP) in\n Python 2.7 (was only working in Python 3.\\* before)\n- Fixed permissions generated for services that include the API version\n date (e.g.\u00a0Lambda, CloudFront) (#20)\n\n.. section-6:\n\n0.4.0\n-----\n\n.. added-3:\n\nAdded\n~~~~~\n\n- Support for CloudTrail ``lookup_events`` API that allows users to\n generate a policy without downloading logs from an S3 bucket. Note\n that this API only returns *`\u201ccreate, modify, and delete API\n calls\u201d `__*\n- ``trailscraper download`` now supports ``--from`` and ``--to`` flags\n to specify the timeframe that should be downloaded. Accepts precise\n (e.g. \u201c2017-10-12\u201d) and relative (e.g. \u201c-2days\u201d) arguments.\n- ``trailscraper generate-policy`` now supports ``--from`` and ``--to``\n to filter events to consider for the generated policy. Accepts\n precise (e.g. \u201c2017-10-12\u201d) and relative (e.g. \u201c-2days\u201d) arguments.\n\n- Performance optimizations: ``generate-policy`` only reads logfiles\n for the timeframe requested\n\n- Added ``--version`` command line argument\n\n.. changed-1:\n\nChanged\n~~~~~~~\n\n- Set more flexible dependencies\n\n.. removed-1:\n\nRemoved\n~~~~~~~\n\n- Removed ``--past-days`` parameter in ``trailscraper download``. Was\n replaced by ``--from`` and ``--to`` (see above)\n\n.. fixed-4:\n\nFixed\n~~~~~\n\n- Ignore record files that can\u2019t be read (e.g.\u00a0not valid GZIP)\n\n.. section-7:\n\n0.3.0\n-----\n\n.. added-4:\n\nAdded\n~~~~~\n\n- Support for Python >= 2.7\n\n.. changed-2:\n\nChanged\n~~~~~~~\n\n- Do not download CloudTrail Logs from S3 if they already exist in the\n target folder (#9)\n- Removed dependency on fork of the awacs-library to simplify\n installation and development\n\n.. fixed-5:\n\nFixed\n~~~~~\n\n- Bug that led to policy-statements with the same set of actions not\n being combined properly in some cases (#7)\n\n.. section-8:\n\n0.2.0\n-----\n\n.. added-5:\n\nAdded\n~~~~~\n\n- Basic filtering for role-arns when generating policy (#3)\n\n.. section-9:\n\n0.1.0\n-----\n\n*Initial Release*\n\n.. added-6:\n\nAdded\n~~~~~\n\n- Basic feature to download CloudTrail Logs from S3 for certain\n accounts and timeframe\n- Basic feature to generate IAM Policies from a set of downloaded\n CloudTrail logs\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/flosell/trailscraper", "keywords": "aws cloud iam cloudtrail trailscraper", "license": "Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "trailscraper", "package_url": "https://pypi.org/project/trailscraper/", "platform": "", "project_url": "https://pypi.org/project/trailscraper/", "project_urls": { "Homepage": "http://github.com/flosell/trailscraper" }, "release_url": "https://pypi.org/project/trailscraper/0.5.1/", "requires_dist": null, "requires_python": "", "summary": "A command-line tool to get valuable information out of AWS CloudTrail", "version": "0.5.1" }, "last_serial": 3946601, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "c51c1f9bd09a8aa081d32990c385d797", "sha256": "a44f1b2da875311acadb323a82b8930f9f8d3659376f391ba81a378b88f72ae7" }, "downloads": -1, "filename": "trailscraper-0.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "c51c1f9bd09a8aa081d32990c385d797", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 8043, "upload_time": "2017-11-26T13:31:40", "url": "https://files.pythonhosted.org/packages/eb/a9/f42b9e89b74c5b8970f334b45910c532e0543a0abb90b2239e35ba68243e/trailscraper-0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ae18f5a0effcc91720ed268a66a6367", "sha256": "f4642ea211639cda4994b716090fbb0801d28209359b55041d25236e403e238a" }, "downloads": -1, "filename": "trailscraper-0.1.tar.gz", "has_sig": true, "md5_digest": "8ae18f5a0effcc91720ed268a66a6367", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5135, "upload_time": "2017-11-26T13:31:38", "url": "https://files.pythonhosted.org/packages/1d/bc/e09565ac0e27deb1be3544f2a73f779bf1a692eb1d3fc387e6fee633dbe6/trailscraper-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "57dcc17d7c571629ce4f14262b9f4e51", "sha256": "ded8e463ac93372230d2df609a6390dadcc8da3881610fd3751758cf7cd60014" }, "downloads": -1, "filename": "trailscraper-0.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "57dcc17d7c571629ce4f14262b9f4e51", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 9576, "upload_time": "2017-11-27T21:04:54", "url": "https://files.pythonhosted.org/packages/30/57/16ffbd803b69f9282f988a8da8f42b42c76f9afe4b2bda552f8e72282d29/trailscraper-0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "518267312cb56ebf7eedc4c1deb84a60", "sha256": "55d4d0cc16b08f4a77f65d255f0e56f9ae537ebcef0653f998b20a172b576503" }, "downloads": -1, "filename": "trailscraper-0.2.tar.gz", "has_sig": true, "md5_digest": "518267312cb56ebf7eedc4c1deb84a60", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6086, "upload_time": "2017-11-27T21:04:50", "url": "https://files.pythonhosted.org/packages/0b/80/d9b4bab6cc644bd448a8dc7ad15c5e7a8751f28d680ef52588f2d770ddbf/trailscraper-0.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "51778d6d4d628a7664a3f0dee4bbfab3", "sha256": "7f086299c54d44c7bcaddb068299f277f411c4293f699d4001360ee14f1856f5" }, "downloads": -1, "filename": "trailscraper-0.3.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "51778d6d4d628a7664a3f0dee4bbfab3", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 10797, "upload_time": "2017-12-17T13:17:00", "url": "https://files.pythonhosted.org/packages/48/24/0b4ff516ba9f4be93ce97a205558d94ed304ad65f615bcc5ffc7637e2eaa/trailscraper-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3cff00dda64d0833a267d33efc5081ef", "sha256": "adc3ed63511f483849aa6da4489f61e3c98c84f1d2a30e79a1bc5bbc6866f1d1" }, "downloads": -1, "filename": "trailscraper-0.3.0.tar.gz", "has_sig": true, "md5_digest": "3cff00dda64d0833a267d33efc5081ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7870, "upload_time": "2017-12-17T13:16:58", "url": "https://files.pythonhosted.org/packages/d6/92/0ef1ad791207440f81eb9a1374b402b19a924718c11f7178a731c5d14cd4/trailscraper-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "86ea193ce98cf482a20681500b9889da", "sha256": "6b65a31a530072d87ed9bd70f37b4dfcb32549c26b95853f003c5e64d01a50f7" }, "downloads": -1, "filename": "trailscraper-0.4.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "86ea193ce98cf482a20681500b9889da", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 13776, "upload_time": "2017-12-24T15:11:10", "url": "https://files.pythonhosted.org/packages/01/8c/caac3d6b3bac07957de234a279f9cb465c2cb29270ad7a3cce2f0f9ec640/trailscraper-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "703a2a979b9c205a285e004f06740535", "sha256": "3def05663723d8b29e90a2a415cb9ebaedd5dec1445a8b3ac894b9ae1f89c747" }, "downloads": -1, "filename": "trailscraper-0.4.0.tar.gz", "has_sig": true, "md5_digest": "703a2a979b9c205a285e004f06740535", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11337, "upload_time": "2017-12-24T15:11:07", "url": "https://files.pythonhosted.org/packages/df/fe/bbef7b4be8cb8d5e257e61db233f30f3423ed79faa808e714184c9f0ceec/trailscraper-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "4addf591cc7449dc921ce599ec640ed8", "sha256": "96d3bb8fde2e087e0786e1ba53ec372800304fb3cb039fdf015c81620d70df4b" }, "downloads": -1, "filename": "trailscraper-0.4.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "4addf591cc7449dc921ce599ec640ed8", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14257, "upload_time": "2017-12-28T20:38:28", "url": "https://files.pythonhosted.org/packages/12/9d/ee4b777db40633676cf06ad06dec14308f4cedaa1a1ae52d9d37289036d9/trailscraper-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4090573b16b75e42842ba9e9aa3dd71e", "sha256": "e8c535d76f97e0d8f9d5301e1bf54c552137bde69645d121fe2655b1aa23a159" }, "downloads": -1, "filename": "trailscraper-0.4.1.tar.gz", "has_sig": true, "md5_digest": "4090573b16b75e42842ba9e9aa3dd71e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11652, "upload_time": "2017-12-28T20:38:19", "url": "https://files.pythonhosted.org/packages/65/ef/36091e8cde2912e8a3b0161a767f15317fcf59b8a7bb17111c568b958222/trailscraper-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "f20e975ca689744a46d9197b3a7a2eaf", "sha256": "a080286a03fe3a6dfb948839192ef6789f6dd24a241663ad9f0b9c387ed758f9" }, "downloads": -1, "filename": "trailscraper-0.4.2-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "f20e975ca689744a46d9197b3a7a2eaf", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 16673, "upload_time": "2018-01-21T19:39:13", "url": "https://files.pythonhosted.org/packages/85/63/d1b6d58b813c8158c4edfafeb14378b9105e7d5b01a0a922c016929b087d/trailscraper-0.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "942a315e98e25db956e2f7b71c9a37a3", "sha256": "1edad946910ee3a9332f360ec447ad50ebd697019c87944dda17f9d8135040c6" }, "downloads": -1, "filename": "trailscraper-0.4.2.tar.gz", "has_sig": true, "md5_digest": "942a315e98e25db956e2f7b71c9a37a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14000, "upload_time": "2018-01-21T19:39:10", "url": "https://files.pythonhosted.org/packages/de/11/82c5967ff9af5e023b59edd97fdfdf58ee1390a95f56a2699ac10eff0c08/trailscraper-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "b41960b8024f77c92222efc947a6ec63", "sha256": "a71544986f4fc2df2ab27cbfba238f54c6c8669f32c20765b966042dbe964c86" }, "downloads": -1, "filename": "trailscraper-0.4.3.tar.gz", "has_sig": true, "md5_digest": "b41960b8024f77c92222efc947a6ec63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14901, "upload_time": "2018-04-16T10:37:28", "url": "https://files.pythonhosted.org/packages/b0/2f/59dba86ff4afae05e3fec635cca30ba2fd1c927b1f9c2548c21a843b6a86/trailscraper-0.4.3.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "cd6e9811d2de068a28c33f4447819a16", "sha256": "45db2cd9c73ff6ffe0820c4ee9b340c242da5e651d39af7bc38fb3d02ebba132" }, "downloads": -1, "filename": "trailscraper-0.4.4-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "cd6e9811d2de068a28c33f4447819a16", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 13647, "upload_time": "2018-04-16T10:45:25", "url": "https://files.pythonhosted.org/packages/65/25/35e90f72c348321ca3eded916dc23eb6c9ccee71e439a739e691f621fa68/trailscraper-0.4.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5ab16ebe7a13327494a5185f4f813a9c", "sha256": "c482c2fb6e322558a27aadf235516019fdfbd814762d48c45668d58532d47a55" }, "downloads": -1, "filename": "trailscraper-0.4.4.tar.gz", "has_sig": true, "md5_digest": "5ab16ebe7a13327494a5185f4f813a9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14966, "upload_time": "2018-04-16T10:45:22", "url": "https://files.pythonhosted.org/packages/46/88/d5f0e2d536f2a764ce6835a104d9e7a722087fb9291387f924e34512e5d9/trailscraper-0.4.4.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "c8a9fafd894ff0a2cf184ff46e24f293", "sha256": "62a4f9ea77eee06bf872604b4188a5d9486a8d5e3ec357baf5022854c789d6f6" }, "downloads": -1, "filename": "trailscraper-0.5.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "c8a9fafd894ff0a2cf184ff46e24f293", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 14528, "upload_time": "2018-05-01T05:06:27", "url": "https://files.pythonhosted.org/packages/d2/8a/f4157e01591ba544990bc08dd231780a91b1788b278de33de147f4b95f46/trailscraper-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f43463a98a1faebe6a4f6678a2d1e64a", "sha256": "61fe07008288ce343bea60e00469cd49d781fad0b9193620e094dd9992d2e5a2" }, "downloads": -1, "filename": "trailscraper-0.5.0.tar.gz", "has_sig": true, "md5_digest": "f43463a98a1faebe6a4f6678a2d1e64a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17007, "upload_time": "2018-05-01T05:06:22", "url": "https://files.pythonhosted.org/packages/93/1e/e9080d1c44c7618e571322acf6208103a5af2e114f9370f3a19972f01e50/trailscraper-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "0a6eccb12342c79390719c081e089631", "sha256": "05639761ed5260dc28ceccce0ffb0c25c461f4a1c93d7b0b08ecaef1f69b6896" }, "downloads": -1, "filename": "trailscraper-0.5.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "0a6eccb12342c79390719c081e089631", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 16608, "upload_time": "2018-06-10T05:21:46", "url": "https://files.pythonhosted.org/packages/4b/4a/e514d0c6f686088b0f85650658b7677be7dcf8a0f7a158f519eafcc311fc/trailscraper-0.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c39b5882b88afcde76293962cb8b2cb6", "sha256": "dfd4fd3d74b3c1212fc4e224392f95a5bc51f28cc542890c5f31eea1108b71d1" }, "downloads": -1, "filename": "trailscraper-0.5.1.tar.gz", "has_sig": true, "md5_digest": "c39b5882b88afcde76293962cb8b2cb6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19531, "upload_time": "2018-06-10T05:21:43", "url": "https://files.pythonhosted.org/packages/71/58/3550a9ff3249d3b0396dadb3d6591f77b062949b2f4640720723d94897aa/trailscraper-0.5.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0a6eccb12342c79390719c081e089631", "sha256": "05639761ed5260dc28ceccce0ffb0c25c461f4a1c93d7b0b08ecaef1f69b6896" }, "downloads": -1, "filename": "trailscraper-0.5.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "0a6eccb12342c79390719c081e089631", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 16608, "upload_time": "2018-06-10T05:21:46", "url": "https://files.pythonhosted.org/packages/4b/4a/e514d0c6f686088b0f85650658b7677be7dcf8a0f7a158f519eafcc311fc/trailscraper-0.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c39b5882b88afcde76293962cb8b2cb6", "sha256": "dfd4fd3d74b3c1212fc4e224392f95a5bc51f28cc542890c5f31eea1108b71d1" }, "downloads": -1, "filename": "trailscraper-0.5.1.tar.gz", "has_sig": true, "md5_digest": "c39b5882b88afcde76293962cb8b2cb6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19531, "upload_time": "2018-06-10T05:21:43", "url": "https://files.pythonhosted.org/packages/71/58/3550a9ff3249d3b0396dadb3d6591f77b062949b2f4640720723d94897aa/trailscraper-0.5.1.tar.gz" } ] }