{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3" ], "description": "# Scrapy Autounit\n\n[![AppVeyor](https://ci.appveyor.com/api/projects/status/github/scrapinghub/scrapy-autounit?branch=master&svg=true)](https://ci.appveyor.com/project/scrapinghub/scrapy-autounit/branch/master)\n[![PyPI Version](https://img.shields.io/pypi/v/scrapy-autounit.svg?color=blue)](https://pypi.python.org/pypi/scrapy-autounit/) \n \n## Documentation\n- [Overview](#overview)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Caveats](#caveats)\n- [Settings](#settings)\n- [Command Line Interface](#command-line-interface)\n- [Internals](#internals) \n \n\n## Overview\n\nScrapy-Autounit is an automatic test generation tool for your Scrapy spiders.\n\nIt generates test fixtures and tests cases as you run your spiders. \n\nThe fixtures are generated from the items and requests that your spider returns, then the test cases evaluate those fixtures against your spiders' callbacks.\n\nScrapy Autounit generates fixtures and tests per spider and callback under the Scrapy project root directory. \nHere is an example of the directory tree of your project once the fixtures are created: \n```\nmy_project\n\u251c\u2500\u2500 autounit\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 tests\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 my_spider\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 my_callback\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 fixture1.bin\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 fixture2.bin\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 test_fixtures.py\n\u251c\u2500\u2500 my_project\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 items.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 middlewares.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 pipelines.py\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 settings.py\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 spiders\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 __init__.py\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 my_spider.py\n\u2514\u2500\u2500 scrapy.cfg\n```\n \n\n## Installation\n\n```\npip install scrapy_autounit\n```\n \n\n## Usage\n\nAdd the spider middleware to your `SPIDER_MIDDLEWARES` setting (no specific order required): \n```python\nSPIDER_MIDDLEWARES = {\n 'scrapy_autounit.AutounitMiddleware': 950\n}\n```\n\n### Generating tests\nMake sure you enable Scrapy Autounit in your settings:\n```python\nAUTOUNIT_ENABLED = True\n```\nTo generate your fixtures and tests just run your spiders as usual, Scrapy Autounit will generate them for you. \n```\n$ scrapy crawl my_spider\n```\nWhen the spider finishes, a directory `autounit` is created in your project root dir, containing all the generated tests/fixtures for the spider you just ran (see the directory tree example above). \n\nIf you want to **update** your tests and fixtures you only need to run your spiders again or use the [`autounit update`](#autounit-update) command line tool.\n\n### Running tests\nTo run your tests you can use `unittest` regular commands.\n\n###### Test all\n```\n$ python -m unittest discover autounit/tests/\n```\n###### Test a specific spider\n```\n$ python -m unittest discover autounit/tests/my_spider/\n```\n###### Test a specific callback\n```\n$ python -m unittest discover autounit/tests/my_spider/my_callback/\n```\n \n\n## Caveats\n- Keep in mind that as long as `AUTOUNIT_ENABLED` is on, each time you run a spider tests/fixtures are going to be generated for its callbacks. \nThis means that if you have your tests/fixtures ready to go, this setting should be off to prevent undesired overwrites. \nEach time you want to regenerate your tests (e.g.: due to changes in your spiders), you can turn this on again and run your spiders as usual. \nFor example, this setting should be off when running your spiders in Scrapy Cloud. \n\n- Autounit uses an internal `_autounit_cassette` key in requests' meta dictionaries. Avoid using/overriding this key in your spiders when adding data to meta to prevent unexpected behaviours. \n \n\n## Settings\n\n###### General\n\n- **AUTOUNIT_ENABLED** \nSet this to `True` or `False` to enable or disable unit test generation.\n\n- **AUTOUNIT_MAX_FIXTURES_PER_CALLBACK** \nSets the maximum number of fixtures to store per callback. \n`Minimum: 10` \n`Default: 10`\n\n- **AUTOUNIT_EXTRA_PATH** \nThis is an extra string element to add to the test path and name between the spider name and callback name. You can use this to separate tests from the same spider with different configurations. \n`Default: None`\n\n- **AUTOUNIT_FIXTURE_NAMING_ATTR** \nAllows you to specify a spider attribute to be used in your fixtures names. \nThe fixture name will consist of your specified attribute value and the internal callback counter. \n`fixture_{your_spider_attr}_{internal_counter}.bin` \nIf this settings is not specified, the default `fixtureN.bin` naming will be used. \n`Default: None`\n\n###### Output\n\n- **AUTOUNIT_DONT_TEST_OUTPUT_FIELDS** \nSets a list of fields to be skipped from testing your callbacks' items. It's useful to bypass fields that return a different value on each run. \nFor example if you have a field that is always set to `datetime.now()` in your spider, you probably want to add that field to this list to be skipped on tests. Otherwise you'll get a different value when you're generating your fixtures than when you're running your tests, making your tests fail. \n`Default: []`\n\n###### Requests\n\n- **AUTOUNIT_DONT_TEST_REQUEST_ATTRS** \nSets a list of request attributes to be skipped when running your tests. \n`Default: []`\n\n- **AUTOUNIT_DONT_RECORD_HEADERS** \nSets a list of headers to exclude from requests recording. \nFor security reasons, Autounit already excludes `Authorization` and `Proxy-Authorization` headers by default, if you want to record them in your fixtures see *`AUTOUNIT_RECORD_AUTH_HEADERS`*. \n`Default: []` \n\n- **AUTOUNIT_RECORD_AUTH_HEADERS** \nIf you want to include `Authorization` or `Proxy-Authorization` headers in your fixtures, add one or both of them to this list. \n`Default: []`\n\n- **AUTOUNIT_DONT_RECORD_META** \nSets a list of jmespath-like keys to exclude from requests meta recording. \nThese keys will not be recorded in autounit fixtures. \nKeys syntax supported so far: `single_key`, `key.subkey`, `key.list[]`, `key.list[].subkey` \n`Default: []`\n\n- **AUTOUNIT_DONT_TEST_META** \nSame as `AUTOUNIT_DONT_RECORD_META` but this only skips the specified meta keys at the testing stage. \nThe keys will be recorded in autounit fixtures. \n`Default: []`\n\n###### Spider attributes\n\n- **AUTOUNIT_DONT_RECORD_SPIDER_ATTRS** \nSets a list of spider attributes that won't be recorded into your fixtures. \n`Default: []`\n\n- **AUTOUNIT_DONT_TEST_SPIDER_ATTRS** \nSets a list of spider attributes to be skipped from testing your callbacks. These attributes will still be recorded. \n`Default: []`\n\n###### Settings\n\n- **AUTOUNIT_RECORD_SETTINGS** \nSets a list of settings names to be recorded in the generated test case. \n`Default: []`\n\n---\n**Note**: Remember that you can always apply any of these settings per spider including them in your spider's `custom_settings` class attribute - see https://docs.scrapy.org/en/latest/topics/settings.html#settings-per-spider. \n \n\n## Command line interface\n\n- [`autounit inspect`](#autounit-inspect): inspects fixtures returning a JSON object\n- [`autounit update`](#autounit-update): updates fixtures to callback changes\n\n### `autounit inspect` \n\nTo inspect a fixture's data, you need to pass the spider, callback and fixture name to the command:\n```\n$ autounit inspect my_spider my_callback fixture3\n```\nThe fixture can also be passed as a number indicating which fixture number to inspect like this:\n```\n$ autounit inspect my_spider my_callback 3\n```\n**Note:** It's highly recommended that your fixtures were generated with scrapy-autounit 0.0.22 or higher to inspect data.\n\n#### Extracted Data\nThis command returns a JSON object that can be parsed with tools like `jq` to inspect specific blocks of data. \n\nThe top-level keys of the JSON output are: \n\n***`spider_name`*** \nThe name of the spider. \n\n***`request`*** \nThe original request that triggered the callback. \n\n***`response`*** \nThe response obtained from the original request and passed to the callback. \n\n***`output_data`*** \nThe callback's output such as items and requests. \n_Same as ***`result`*** prior to v0.0.28._\n\n***`middlewares`*** \nThe relevant middlewares to replicate when running the tests. \n\n***`settings`*** \nThe settings explicitly recorded by the *`AUTOUNIT_INCLUDED_SETTINGS`* setting. \n\n***`init_attrs`*** \nThe spider's attributes right after its _\\_\\_init\\_\\__ call.\n\n***`input_attrs`*** \nThe spider's attributes right before running the callback. \n_Same as ***`spider_args`*** or ***`spider_args_in`*** prior to v0.0.28._\n\n***`output_attrs`*** \nThe spider's attributes right after running the callback. \n_Same as ***`spider_args_out`*** prior to v0.0.28._\n\nThen for example, to inspect a fixture's specific request we can do the following:\n```\n$ autounit inspect my_spider my_callback 4 | jq '.request'\n```\n\n### `autounit update`\n\nThis command updates your fixtures to match your latest changes, avoiding to run the whole spider again. \nYou can update the whole project, an entire spider, just a callback or a single fixture. \n\n###### Update the whole project\n```\n$ autounit update\nWARNING: this will update all the existing fixtures from the current project\nDo you want to continue? (y/n)\n```\n\n###### Update every callback in a spider\n```\n$ autounit update -s my_spider\n```\n\n###### Update every fixture in a callback\n```\n$ autounit update -s my_spider -c my_callback\n```\n\n###### Update a single fixture\n```\n# Update fixture number 5\n$ autounit update -s my_spider -c my_callback -f 5\n```\n \n\n## Internals\n\nThe `AutounitMiddleware` uses a [`Recorder`](scrapy_autounit/recorder.py) to record [`Cassettes`](scrapy_autounit/cassette.py) in binary fixtures. \n\nThen, the tests use a [`Player`](scrapy_autounit/player.py) to playback those `Cassettes` and compare its output against your current callbacks. \n\nThe fixtures contain a pickled and compressed `Cassette` instance that you can get programmatically by doing:\n```python\nfrom scrapy_autounit.cassette import Cassette\n\ncassette = Cassette.from_fixture(path_to_your_fixture)\n# cassette.request\n# cassette.response\n# cassette.output_data\n# ...\n```\n\nIf you know what you're doing, you can modify that cassette and re-record it by using:\n```python\nfrom scrapy_autounit.recorder import Recorder\n\nRecorder.update_fixture(cassette, path)\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/scrapinghub/scrapy-autounit", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "scrapy-autounit", "package_url": "https://pypi.org/project/scrapy-autounit/", "platform": "", "project_url": "https://pypi.org/project/scrapy-autounit/", "project_urls": { "Homepage": "https://github.com/scrapinghub/scrapy-autounit" }, "release_url": "https://pypi.org/project/scrapy-autounit/0.0.32/", "requires_dist": null, "requires_python": "", "summary": "Automatic unit test generation for Scrapy.", "version": "0.0.32", "yanked": false, "yanked_reason": null }, "last_serial": 10869533, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "758ba71c63e8a03842b8b98aa0b7a66f", "sha256": "da4523340f72457f60ab18af80a84f7c9b67bab3c93308ac84f3284ceec0ffad" }, "downloads": -1, "filename": "scrapy-autounit-0.0.1.tar.gz", "has_sig": false, "md5_digest": "758ba71c63e8a03842b8b98aa0b7a66f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4427, "upload_time": "2019-01-11T17:01:55", "upload_time_iso_8601": "2019-01-11T17:01:55.276406Z", "url": "https://files.pythonhosted.org/packages/e0/f7/b6506002187610b007aa0219fb2e94a062b6588f812e577020d2be222e27/scrapy-autounit-0.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "6a2fb35c805e0ac559f09b6dfe341814", "sha256": "62a9a7dbb94466350aa2888e353a8e597bd2575b8ec8f0d6be9985f89f7746e1" }, "downloads": -1, "filename": "scrapy-autounit-0.0.10.tar.gz", "has_sig": false, "md5_digest": "6a2fb35c805e0ac559f09b6dfe341814", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6132, "upload_time": "2019-02-20T17:02:51", "upload_time_iso_8601": "2019-02-20T17:02:51.640017Z", "url": "https://files.pythonhosted.org/packages/3b/ab/e51dbf5818402fdcf80c38d153ae7d6504c4135c3f10de6678f1c4867039/scrapy-autounit-0.0.10.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "ae9dae51bf8517e58af6689cc3266d00", "sha256": "5b070c73ed58d4f57837fffaa3df2c4867b1613892b449dfc6b145ea4ab40507" }, "downloads": -1, "filename": "scrapy-autounit-0.0.11.tar.gz", "has_sig": false, "md5_digest": "ae9dae51bf8517e58af6689cc3266d00", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6334, "upload_time": "2019-02-25T14:53:52", "upload_time_iso_8601": "2019-02-25T14:53:52.642603Z", "url": "https://files.pythonhosted.org/packages/91/49/2937064df61c587658976fe1f6c9c902a47482f2a29a7285f014b27267bb/scrapy-autounit-0.0.11.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "5ab4144a10bb05b597f2dedb1efc1013", "sha256": "c64562d4691b6a86201e4d628dded3ceab2da684a5b8c8a80b537cdde1427da2" }, "downloads": -1, "filename": "scrapy-autounit-0.0.12.tar.gz", "has_sig": false, "md5_digest": "5ab4144a10bb05b597f2dedb1efc1013", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6457, "upload_time": "2019-03-11T14:32:35", "upload_time_iso_8601": "2019-03-11T14:32:35.856581Z", "url": "https://files.pythonhosted.org/packages/b3/8d/87c46006f8faa2221ff357284e656935503ca4039ee1e7fe65ceecf064ff/scrapy-autounit-0.0.12.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "62ee3213dabaa950177b0568bc09222f", "sha256": "072da309c38289f22b37a4f98e62c068babfed1f14c6597d5ac7c2263ffc44e6" }, "downloads": -1, "filename": "scrapy-autounit-0.0.13.tar.gz", "has_sig": false, "md5_digest": "62ee3213dabaa950177b0568bc09222f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5800, "upload_time": "2019-04-11T16:44:02", "upload_time_iso_8601": "2019-04-11T16:44:02.165232Z", "url": "https://files.pythonhosted.org/packages/e9/93/a9fdda37a8b1008f0a4a47ec840cf29fbe270b116b728264968e5e1aefa2/scrapy-autounit-0.0.13.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "96ccc85d6c6dd0d60aeac8e2e296af11", "sha256": "305477a33638ee86023a386eb95c0edb99364971a9e63b89322a2e1f17bd8ad6" }, "downloads": -1, "filename": "scrapy-autounit-0.0.14.tar.gz", "has_sig": false, "md5_digest": "96ccc85d6c6dd0d60aeac8e2e296af11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6192, "upload_time": "2019-04-23T18:59:53", "upload_time_iso_8601": "2019-04-23T18:59:53.624363Z", "url": "https://files.pythonhosted.org/packages/8d/67/ad847800e303450412337a11f318f4e0a340009ffc1f113174104c8a1dbc/scrapy-autounit-0.0.14.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.15": [ { "comment_text": "", "digests": { "md5": "af396dbbecb6ee4d71d177cd80d83004", "sha256": "a3eedfbcbea2c0242e57df8fd7c5672ed719d475a658ba7cdcaebbe2351448cb" }, "downloads": -1, "filename": "scrapy-autounit-0.0.15.tar.gz", "has_sig": false, "md5_digest": "af396dbbecb6ee4d71d177cd80d83004", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6163, "upload_time": "2019-04-25T17:28:41", "upload_time_iso_8601": "2019-04-25T17:28:41.006273Z", "url": "https://files.pythonhosted.org/packages/fd/1c/10215e4a242498fb8ff05160d694615444fc9f05c82e70c6d537f9e3c9d4/scrapy-autounit-0.0.15.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "5ae514bbe54181966d2d744cbf077a7e", "sha256": "4bc81fd29cdd257f84252ebcebfd6e9a07f067756300e0090cce8d96ea2949ad" }, "downloads": -1, "filename": "scrapy-autounit-0.0.16.tar.gz", "has_sig": false, "md5_digest": "5ae514bbe54181966d2d744cbf077a7e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8221, "upload_time": "2019-07-11T18:51:26", "upload_time_iso_8601": "2019-07-11T18:51:26.031713Z", "url": "https://files.pythonhosted.org/packages/15/9d/b61001c187db87b408b8b5725e200f3fb2b4ac53bef122134f3443854570/scrapy-autounit-0.0.16.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.17": [ { "comment_text": "", "digests": { "md5": "fcf88a7c820441985c2e12817fd55f65", "sha256": "cf2d8c8023c0ca98230c1f1c821467844449cbb8c26e7458aeb7ccca1304c177" }, "downloads": -1, "filename": "scrapy-autounit-0.0.17.tar.gz", "has_sig": false, "md5_digest": "fcf88a7c820441985c2e12817fd55f65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8238, "upload_time": "2019-08-05T16:59:03", "upload_time_iso_8601": "2019-08-05T16:59:03.980509Z", "url": "https://files.pythonhosted.org/packages/41/4e/83ae6ab20cdf429be184e9b737e11592cd7433353c251fb21bf1953221d2/scrapy-autounit-0.0.17.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.18": [ { "comment_text": "", "digests": { "md5": "8c8879fae11c9bec309f3fc0e1dd7fa6", "sha256": "b787b93d0e489da9aee4e1f8c4676750b7355f09e64355c76ab91963c9cd08f0" }, "downloads": -1, "filename": "scrapy-autounit-0.0.18.tar.gz", "has_sig": false, "md5_digest": "8c8879fae11c9bec309f3fc0e1dd7fa6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8684, "upload_time": "2019-08-09T15:08:42", "upload_time_iso_8601": "2019-08-09T15:08:42.937501Z", "url": "https://files.pythonhosted.org/packages/5b/45/940f2ad30a78385c579cbd46ca75ba71c7fdfebb5b1b12b1ab9f941fecd7/scrapy-autounit-0.0.18.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.19": [ { "comment_text": "", "digests": { "md5": "860466a002dd94f2cc76b18a448f625e", "sha256": "09d30fa616daac26e18c2f53c7c13ed641bd4633816e4921cdbf76606145dc15" }, "downloads": -1, "filename": "scrapy-autounit-0.0.19.tar.gz", "has_sig": false, "md5_digest": "860466a002dd94f2cc76b18a448f625e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8789, "upload_time": "2019-08-27T18:38:56", "upload_time_iso_8601": "2019-08-27T18:38:56.495693Z", "url": "https://files.pythonhosted.org/packages/1c/f0/76f5fd4e51edad46cd1a7ce63c6c51991c166744196df91358fb0a905c19/scrapy-autounit-0.0.19.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "a44eab17c1b79fd2af063f81df82c0d2", "sha256": "c72815428e188deae507df91a9918b793fe3c777ecc6896ae89e54360bb00bee" }, "downloads": -1, "filename": "scrapy-autounit-0.0.2.tar.gz", "has_sig": false, "md5_digest": "a44eab17c1b79fd2af063f81df82c0d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4625, "upload_time": "2019-01-30T13:02:00", "upload_time_iso_8601": "2019-01-30T13:02:00.138680Z", "url": "https://files.pythonhosted.org/packages/ee/ca/3a22d7edb26f22b6cb9ff51307b554e3228b6b79e374cec2b84dd1559dde/scrapy-autounit-0.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.20": [ { "comment_text": "", "digests": { "md5": "4f61f859c55ec4f8306aaa8818f51cb2", "sha256": "f48265c001b8fe246c6b7a487d310b5b63f3cf98a49ec2decd7049aff176914e" }, "downloads": -1, "filename": "scrapy-autounit-0.0.20.tar.gz", "has_sig": false, "md5_digest": "4f61f859c55ec4f8306aaa8818f51cb2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8786, "upload_time": "2019-08-27T18:58:09", "upload_time_iso_8601": "2019-08-27T18:58:09.999556Z", "url": "https://files.pythonhosted.org/packages/58/56/248b648b7f984206b7f50b904a92363903c8ab8f9c90096131013e27917c/scrapy-autounit-0.0.20.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.21": [ { "comment_text": "", "digests": { "md5": "e1431b78a083bafd68f60d268d194d07", "sha256": "705fb639138bd4e4ed321012ae135727d0151e2d47a2af923e8f159a5275fba9" }, "downloads": -1, "filename": "scrapy-autounit-0.0.21.tar.gz", "has_sig": false, "md5_digest": "e1431b78a083bafd68f60d268d194d07", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9130, "upload_time": "2019-09-04T13:57:24", "upload_time_iso_8601": "2019-09-04T13:57:24.552516Z", "url": "https://files.pythonhosted.org/packages/0b/5f/f0cbaf7c1d3c842c55e7a41f4932910e59f1105fac48d1c5b5cb131ad10a/scrapy-autounit-0.0.21.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.22": [ { "comment_text": "", "digests": { "md5": "318609757e0e759ccfcdc2e87fc59572", "sha256": "840b496e8e3c9302b81cfcc291c7b3aa232434becb0f6a9ab16542cb67d3b8b0" }, "downloads": -1, "filename": "scrapy-autounit-0.0.22.tar.gz", "has_sig": false, "md5_digest": "318609757e0e759ccfcdc2e87fc59572", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10730, "upload_time": "2019-10-23T03:48:17", "upload_time_iso_8601": "2019-10-23T03:48:17.177336Z", "url": "https://files.pythonhosted.org/packages/dd/92/d0189fe92dbccf61728c47600bd2d58535788a59cc72d0d989350bfcd354/scrapy-autounit-0.0.22.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.23": [ { "comment_text": "", "digests": { "md5": "58b39f57d2df082bcbc22cc20cdc17a1", "sha256": "bc0ca0971ff204b740bd523dc34f919692c236c6fea8bde4ebc5b86a83802d56" }, "downloads": -1, "filename": "scrapy-autounit-0.0.23.tar.gz", "has_sig": false, "md5_digest": "58b39f57d2df082bcbc22cc20cdc17a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12233, "upload_time": "2019-11-27T22:54:10", "upload_time_iso_8601": "2019-11-27T22:54:10.414565Z", "url": "https://files.pythonhosted.org/packages/6a/c8/4b0533358c96600b86d4d38955c9485b8e40409a9da5bbd4eec4068ebbb6/scrapy-autounit-0.0.23.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.24": [ { "comment_text": "", "digests": { "md5": "aa5ff7599e7ed5d36e35e9322f031e3d", "sha256": "01dbc2192673278831605c0668ad7f976750777722fe5195a7ac0913af693dea" }, "downloads": -1, "filename": "scrapy-autounit-0.0.24.tar.gz", "has_sig": false, "md5_digest": "aa5ff7599e7ed5d36e35e9322f031e3d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14842, "upload_time": "2019-12-03T19:13:15", "upload_time_iso_8601": "2019-12-03T19:13:15.183995Z", "url": "https://files.pythonhosted.org/packages/4a/11/ee8d7abc6b79eb3cf986c8540a41ef26295b68708d0d6a8d9b857dc79767/scrapy-autounit-0.0.24.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.25": [ { "comment_text": "", "digests": { "md5": "1b3524712a5dc37542363cb49b7adb5a", "sha256": "6f284d28965e28ca90d410a237edeb8ed1de52b36f1fb852c6fdcb7b9b9b901a" }, "downloads": -1, "filename": "scrapy-autounit-0.0.25.tar.gz", "has_sig": false, "md5_digest": "1b3524712a5dc37542363cb49b7adb5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15133, "upload_time": "2020-01-07T18:09:06", "upload_time_iso_8601": "2020-01-07T18:09:06.011269Z", "url": "https://files.pythonhosted.org/packages/da/4e/76c70d7918eda49534ecc1eaede80120eec051ee5a92e8de5f635b73bbdd/scrapy-autounit-0.0.25.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.26": [ { "comment_text": "", "digests": { "md5": "ed2ca8501e4ad5ced51087a98c60cad6", "sha256": "68b1840c56be4071ed8df4ea2eac302145a754a644a91323432736d502ffe47b" }, "downloads": -1, "filename": "scrapy-autounit-0.0.26.tar.gz", "has_sig": false, "md5_digest": "ed2ca8501e4ad5ced51087a98c60cad6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16258, "upload_time": "2020-03-30T14:28:06", "upload_time_iso_8601": "2020-03-30T14:28:06.845901Z", "url": "https://files.pythonhosted.org/packages/bf/9b/503efa8c0ec5c7e0f72c664cd8f7ecd3091e045095172b21d4a9911b2f50/scrapy-autounit-0.0.26.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.27": [ { "comment_text": "", "digests": { "md5": "ee7868ded2073ef1807d5242d0f959df", "sha256": "03536c34b9e61517ba33e59471a4757ce62675f8962aebdb77998f2c42b9bde0" }, "downloads": -1, "filename": "scrapy-autounit-0.0.27.tar.gz", "has_sig": false, "md5_digest": "ee7868ded2073ef1807d5242d0f959df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15827, "upload_time": "2020-05-06T14:56:54", "upload_time_iso_8601": "2020-05-06T14:56:54.725081Z", "url": "https://files.pythonhosted.org/packages/f7/a9/6a82e5ed4ee7f7b15c5d81faaf24420f72e50cca65b27f7b7db14715b9b8/scrapy-autounit-0.0.27.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.28": [ { "comment_text": "", "digests": { "md5": "65dbbcd5ad7152bae11081e8ee7b0d1b", "sha256": "0c732c10c6528b73fe3f164661201e3fe408400e493edcf60307d941ca774476" }, "downloads": -1, "filename": "scrapy-autounit-0.0.28.tar.gz", "has_sig": false, "md5_digest": "65dbbcd5ad7152bae11081e8ee7b0d1b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18937, "upload_time": "2020-09-21T16:13:31", "upload_time_iso_8601": "2020-09-21T16:13:31.528699Z", "url": "https://files.pythonhosted.org/packages/26/ce/d35b09d61d49c50e22b652e68db857762f720eeea759b7344ee05b56b6fa/scrapy-autounit-0.0.28.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.29": [ { "comment_text": "", "digests": { "md5": "f7daed8d1a11d402b1b62f24d8d713e5", "sha256": "d758f301b51c24c2bbb24e82c65d58d6327dbfdda9f475fe8565ea96ad8086c0" }, "downloads": -1, "filename": "scrapy-autounit-0.0.29.tar.gz", "has_sig": false, "md5_digest": "f7daed8d1a11d402b1b62f24d8d713e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18995, "upload_time": "2020-09-28T13:25:41", "upload_time_iso_8601": "2020-09-28T13:25:41.618784Z", "url": "https://files.pythonhosted.org/packages/97/e2/bb288c5aef4b2f9f6df60a71f78420832d79295d9c4f4f15fcfc0baee622/scrapy-autounit-0.0.29.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "eafa6c3e71ad57f6c259b4d47ecad9ae", "sha256": "1992d3d24996fd0dd2309bb2391388812a970e8bae928f01ddae858234885f4b" }, "downloads": -1, "filename": "scrapy-autounit-0.0.3.tar.gz", "has_sig": false, "md5_digest": "eafa6c3e71ad57f6c259b4d47ecad9ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4903, "upload_time": "2019-01-31T13:20:03", "upload_time_iso_8601": "2019-01-31T13:20:03.866221Z", "url": "https://files.pythonhosted.org/packages/1a/af/34baebcd85afe7428ab4848e290279d82f381a27890306f66e2d7f2d9c71/scrapy-autounit-0.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.30": [ { "comment_text": "", "digests": { "md5": "8f32e75ed938e72241aa0e4352134e02", "sha256": "8cdd1df4fba8a5ac8e073efe61f9c7ee5aae96b8d7f35562e0080a63786e3121" }, "downloads": -1, "filename": "scrapy-autounit-0.0.30.tar.gz", "has_sig": false, "md5_digest": "8f32e75ed938e72241aa0e4352134e02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19046, "upload_time": "2020-09-28T16:16:46", "upload_time_iso_8601": "2020-09-28T16:16:46.494402Z", "url": "https://files.pythonhosted.org/packages/c5/1c/8a1d08eb1d269ad3b36823b3656cd3b9db0f3ce8193a767ab1e4fc0d1051/scrapy-autounit-0.0.30.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.31": [ { "comment_text": "", "digests": { "md5": "87c200685e5eda76f9080d6a280dcf71", "sha256": "6889fc8aed1697c5da0975e0732bc9ba5f2af0264ba53bd99cc99ab3feec9713" }, "downloads": -1, "filename": "scrapy-autounit-0.0.31.tar.gz", "has_sig": false, "md5_digest": "87c200685e5eda76f9080d6a280dcf71", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20321, "upload_time": "2020-12-28T20:56:38", "upload_time_iso_8601": "2020-12-28T20:56:38.142675Z", "url": "https://files.pythonhosted.org/packages/84/f8/12ad816ff0f37ea31fd991132f19d064292ab0a944e763b412304be6cf36/scrapy-autounit-0.0.31.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.32": [ { "comment_text": "", "digests": { "md5": "c35928c9f002f8450466cfbeb4f23eda", "sha256": "893decfcfb48fdc303de0f56e122f957e21f9691fe29f8212e694051c1f2d2f4" }, "downloads": -1, "filename": "scrapy-autounit-0.0.32.tar.gz", "has_sig": false, "md5_digest": "c35928c9f002f8450466cfbeb4f23eda", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21784, "upload_time": "2021-07-09T22:15:43", "upload_time_iso_8601": "2021-07-09T22:15:43.201568Z", "url": "https://files.pythonhosted.org/packages/73/5a/1a3bda944a3185d1f34f743339cb43a7ee5c5c7ed8ff44795629bab439af/scrapy-autounit-0.0.32.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "df395816e9f890be6d21caa05d5bb1fa", "sha256": "2fdb2deed6965c4f740dc1ac9de7baf1babf98f65b8b3739aef2fad436fc42dc" }, "downloads": -1, "filename": "scrapy-autounit-0.0.4.tar.gz", "has_sig": false, "md5_digest": "df395816e9f890be6d21caa05d5bb1fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5051, "upload_time": "2019-02-01T14:57:39", "upload_time_iso_8601": "2019-02-01T14:57:39.607269Z", "url": "https://files.pythonhosted.org/packages/4e/8f/dd9e1f704a4321f086da69207b5fb5ef0ad7a160aa7e7762f5456577808d/scrapy-autounit-0.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "f0850ccc0c218540b8c2ae5af15e4a40", "sha256": "015b5f471dcfe5e571d726fb4528320d7a3772c01909e3b8bda29c78c1783a17" }, "downloads": -1, "filename": "scrapy-autounit-0.0.5.tar.gz", "has_sig": false, "md5_digest": "f0850ccc0c218540b8c2ae5af15e4a40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5090, "upload_time": "2019-02-05T14:49:47", "upload_time_iso_8601": "2019-02-05T14:49:47.005514Z", "url": "https://files.pythonhosted.org/packages/d9/6d/f1680f47691278f833fb230e650c34d8180a242583b89079242423ed9e6b/scrapy-autounit-0.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "d5cc8fdd99b5dd139432ebf5631e676d", "sha256": "cc1c001b8be03592e24d45e68a92509564f35595ab740af51025bf98053a7c52" }, "downloads": -1, "filename": "scrapy-autounit-0.0.6.tar.gz", "has_sig": false, "md5_digest": "d5cc8fdd99b5dd139432ebf5631e676d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5264, "upload_time": "2019-02-11T14:44:32", "upload_time_iso_8601": "2019-02-11T14:44:32.590684Z", "url": "https://files.pythonhosted.org/packages/7b/19/53a88392bf535a6ccc0f5e7ac6ccc21233ac10117d8d4830327f699a5def/scrapy-autounit-0.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "8a5723df4f5fd15ea7577e60e6e946d9", "sha256": "2a204da905995b129909405e042476fc84391a8b2921ba512c375d19a1f24534" }, "downloads": -1, "filename": "scrapy-autounit-0.0.7.tar.gz", "has_sig": false, "md5_digest": "8a5723df4f5fd15ea7577e60e6e946d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5768, "upload_time": "2019-02-13T21:03:09", "upload_time_iso_8601": "2019-02-13T21:03:09.314084Z", "url": "https://files.pythonhosted.org/packages/c1/67/5c34d8bc2d10cb68a1743cf2e16d1fa3281d0793282608230d7f0aa5d0df/scrapy-autounit-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "b570b0519ff9a8b1db24b6f3e5b34f3f", "sha256": "c3dd09cd6439680139fd617bdac443c10c7eb5c7291db5a7193cf0c10edb1c25" }, "downloads": -1, "filename": "scrapy-autounit-0.0.8.tar.gz", "has_sig": false, "md5_digest": "b570b0519ff9a8b1db24b6f3e5b34f3f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5919, "upload_time": "2019-02-18T17:07:01", "upload_time_iso_8601": "2019-02-18T17:07:01.151166Z", "url": "https://files.pythonhosted.org/packages/44/91/fb8feb287970475fa39e08c843784f282ca0152e4bed0dc949fa2bba703a/scrapy-autounit-0.0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "385b55948eb5238c8838e6622180e4d8", "sha256": "07c54d74a3e0a0be5af6b5087a174b636898c19470a2811acf33165a094b5a8d" }, "downloads": -1, "filename": "scrapy-autounit-0.0.9.tar.gz", "has_sig": false, "md5_digest": "385b55948eb5238c8838e6622180e4d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5921, "upload_time": "2019-02-18T18:41:23", "upload_time_iso_8601": "2019-02-18T18:41:23.560935Z", "url": "https://files.pythonhosted.org/packages/dd/16/6f228ca1f9cee000723bb967c5d9f191a1ddd5416479fdc92f8fcfbd1b78/scrapy-autounit-0.0.9.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c35928c9f002f8450466cfbeb4f23eda", "sha256": "893decfcfb48fdc303de0f56e122f957e21f9691fe29f8212e694051c1f2d2f4" }, "downloads": -1, "filename": "scrapy-autounit-0.0.32.tar.gz", "has_sig": false, "md5_digest": "c35928c9f002f8450466cfbeb4f23eda", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21784, "upload_time": "2021-07-09T22:15:43", "upload_time_iso_8601": "2021-07-09T22:15:43.201568Z", "url": "https://files.pythonhosted.org/packages/73/5a/1a3bda944a3185d1f34f743339cb43a7ee5c5c7ed8ff44795629bab439af/scrapy-autounit-0.0.32.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }