{ "info": { "author": "Sayeef Moyen", "author_email": "develop.sayeefrm@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "\n\n
\n Report Bug\n \u00b7\n Request Feature\n
\n\n\n## Table of Contents\n\n* [About the Project](#about-the-project)\n * [Built With](#built-with)\n * [Why Selenium or Why not Python Requests](#why-selenium-or-why-not-python-requests)\n* [Getting Started](#getting-started)\n * [Runtime](#runtime)\n * [Installation](#install)\n * [Basic Usage](#basic-usage)\n* [Product Object Details](#product-object-details)\n* [Advanced Usage](#advanced-usage)\n * [Specifying the path to ChromeDriver](#specifying-the-path-to-the-chromedriver-binary)\n * [Required Keywords & Strict Search](#required-keywords-&-strict-searching)\n * [Logging](#enable-logging)\n * [Retrieving a Specific Number of Results](#retrieving-a-specific-number-of-results)\n * [Speeding Up](#speeding-up)\n * [Using the Tag Field](#using-product's-tag-field)\n * [Writing Results to JSON/CSV](#writing-results-to-json-or-csv)\n* [Tests](#tests)\n* [What's Next](#what's-next)\n* [Release History](#release-history)\n* [License](#license)\n\n# About the Project\n\n**Hemnes is a pip package for scraping product data from ikea**, built because **rewriting scrapers is a waste of time**. Hemnes gets you to the point of being able to query Ikea's product catalog in less than 30 seconds (I didn't time this). \n\n**The following product data is collected by Hemnes**:\n\n* `name (str)` - name of the product\n* `id (str)` - unique product id\n* `price (float)` - product price\n* `url (str)` - url to product page\n* `rating (float)` - average customer rating\n* `img_urls (list[str])` - urls to product images\n* `colors (list[str])` - product colors (see `COLORS` in `hemnes/helpers/find_element`for a full list of colors being searched for)\n\nHemnes comes equipped with a bit of helpful functionality for doing things like:\n\n* finding products with specific keywords in their descriptions\n* logging\n* writing results to JSON\n\n[Read more about extended functionality here](#additional-options)\n\n### Built With\n\n* [BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/)\n* [ChromeDriver](http://chromedriver.chromium.org)\n* [PyTest](https://docs.pytest.org/en/latest/)\n* [Selenium WebDriver](https://www.seleniumhq.org/docs/03_webdriver.jsp)\n\n### Why Selenium or Why not Python Requests\n\nIf you do a quick browse through stack overflow posts about scraping ikea - or if you are considering writing a scraper yourself - you will probably come across people using selenium Webdriver for pages that don't need it. Selenium is heavier than python requests, however, **webdriver can load angular generated content whereas requests cannot**.\n\nIkea's current website uses angular for its search results. This is a change from its older search, which was accessible via python requests. The new search provides more accurate results, and less garbage. Speaking from experience, the old search is really terrible and provides a number of trash results for any given query that I had trouble connecting back to my original search (one example of this is the old search returning 58 pages of results for 'table', which included things like placemats and dog toys; the new search returns 15, and all of the results are actually tables)\n\n# Getting Started\n\nHemnes is pretty straightforward to install and use. It functions exactly as you would expect a web-scraping package to function - enter a query and get results back.\n\n### Runtime\n\n* Python 3+\n\n### Installation\n\nHemnes is installed using standard pip installation. To install from PyPI run\n\n```bash\npip3 install hemnes\n```\n\nAlternatively, you can clone the repo and then run pip install inside the directory\n\n```bash\n# clone the repository\ngit clone https://github.com/sayeefrmoyen/hemnes.git\ncd hemnes\npip3 install . # install the current directory as a package\n```\n\n#### ChromeDriver\n\nHemnes uses [ChromeDriver](http://chromedriver.chromium.org) to load webpages. If ChromeDriver is already installed and on your syspath you can skip the rest of this section.\n\nTo use ChromeDriver you will need to [install Google Chrome](https://www.google.com/chrome/). If you already have google chrome installed *I believe that you should be able to run Hemnes without a problem*. For full disclosure, I am not familiar with the google chrome or chrome driver code, and do not know how they interact, but I have had no issues running Hemnes without ever explicitly installing the ChromeDriver binary.\n\nWith that said, Selenium's documentation for WebDriver suggests that you install both a version of Google Chrome and ChromeDriver. If you find that after installing Google Chrome you are still receiving errors regarding ChromeDriver, then you should proceed to [install ChromeDriver](https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver).\n\nAt this point, you should be ready to start using Hemnes.\n\n### Basic Usage\n\nAt its simplest, Hemnes only requires a query. Use the `process_query` function to retrieve product data for a given query. `process_query` returns a `list[Product]` containing the products matching the given query.\n\n```python\nimport hemnes\n\n# query ikea's product catalog for products tagged as chairs\n# chair_results is now a list[Product] containing all of the products\n# in ikea's catalog of chairs\nresults = hemnes.process_query('chair')\n```\n\n# Product Object Details\n\nHemnes returns query results in the form of a `list[Product]`. `Product` is a helper class containing the following fields:\n\n* `name (str)` - name of the product\n* `id (str)` - unique product id\n* `price (float)` - product price\n* `url (str)` - url to product page\n* `rating (float)` - average customer rating\n* `img_urls (list[str])` - urls to product images\n* `colors (list[str])` - product colors\n* `tag (str)` - flexible usage field\n\nMost of these are rather self-explanatory; I'm only going to talk about the `tag` field in depth. The `tag` attribute is specified for all products returned by a single call to `process_query`, and is included for flexible use. One example of why such a field would be useful is if you were storing this data in a database and needed a primary key to search on - you could use `tag` to indicate the type of product (chair, table, etc.). By default `tag` is set to `None`. For more details on using tag, see [setting up additional options](#additional-options)\n\nOne more thing to note is that all of these fields, excluding `url`, have the potential to not be found, and subsequently being set to`None`. However, based on testing and examining the structure of Ikea's product webpages, it is unlikely that any of these attributes are unable to be found. The one exception to this rule is the `rating` field, which will be set to `None` any time the product has no reviews.\n\n# Advanced Usage\n\nHemnes expects to be passed an`Options` object to specify a number of additional settings. `Options` is a helper class for organizing passing a large number of parameters to `process_query`. If you don't provide an `Options` object to `process_query`, a number of default settings are selected. The rest of this section will discuss how to modify those settings.\n\n#### Specifying the path to the ChromeDriver binary\n\nIf you have installed the ChromeDriver binary and Google Chrome browser, but are still encountering errors when running Hemnes, you may need to explicitly pass the path to the binary to selenium Webdriver. To do so, use the `Options` class\n\n```python\nimport hemnes\n...\n# explicitly passing the chromedriver binary to webdriver\noptions = hemnes.Options()\noptions.cdriver_path = 'path/to/chromedriver/binary'\nresults = hemnes.process_query('your query', options)\n```\n\n#### Required Keywords & Strict Searching\n\nSometimes it's necessary to refine your query beyond usual high-level query terms. Hemnes allows you to specify a number of `keywords` to search for on product pages, and only return products which contain all or some of those words. `Options` accepts setting the `keywords` field to a `set[str]` containing the desired keywords.\n\nYou can also specify whether or not all of the keywords should be required by setting `Options` `strict` field to a `bool`. By default, `strict` is set to `False`, meaning that if `keywords` are passed, any product with at least one keyword will be returned. To require that all `keywords` are found for returned products, set `strict` to `True`\n\n```python\nimport hemnes\n...\n# setting required keywords\noptions = hemnes.Options()\noptions.keywords = {'large', 'comfortable'}\n# enable strict-searching, requiring all products to contain all of the\n# keywords in order to be returned. If disabled or untouched, any\n# product with at least one of the keywords will be returned\noptions.strict = True\nresults = hemnes.process_query('chair', options)\n```\n\nFor those who are curious about where `keywords` are being looked for, Hemnes searches through 3 different product description sections on each product's page for `keywords`.\n\n#### Enable Logging\n\nSome jobs for queries that return a large number of results may take a while to complete. Even for shorter jobs, it can be helpful to see where Hemnes is in processing a query. In order to enable logging process results, set the `log` field in `Options` to `True`. By default `log` is set to `False` to avoid overwhelming unsuspecting users.\n\n```python\nimport hemnes\n...\n# enabling logs\noptions = hemnes.Options()\noptions.log = True\n# enable logging - this will log to both stdout and to a\n# logfile found at 'hemnes-logs/hemnes-MONTH-DAY-HOUR-MINUTE-SECOND.log\nresults = hemnes.process_query('chair', options)\n```\n\nBy default logging will log to both stdout and to a log file that will look something like `hemnes-logs/hemnes-04-23-02:41:16.log` - the file is named `hemnes-MONTH-DAY-HOUR-MINUTE-SECOND.log`. If there is no `hemnes-logs` directory it will be created prior to trying to write files to it.\n\nHemnes will log things like:\n\n* when a valid product is found\n* when an invalid product is found (e.g. fails keyword requirements)\n* total number of valid products to be returned\n* any potential errors\n\n#### Retrieving a Specific Number of Results\n\nIf you only need a specific number of results for a given query, set the `num_results` field of `Options`.\n\n```python\nimport hemnes\n...\n# setting a target number of results\noptions = hemnes.Options()\noptions.num_results = 10\n# hemnes will only return up to 10 products\nresults = hemnes.process_query('chair', options)\n```\n\nHemnes will return the number of products requested, or fewer if the query did not return enough results.\n\n#### Speeding Up\n\nLoading angular pages can be slow, mostly because it takes time to retrieve full DOM from such pages. Altering the imposed sleep time for DOM to be fully loaded can drastically increase the speed of Hemnes.\n\nBy default, Hemnes requires a 3 second sleep time after each page request in order to insure that the DOM is fully loaded. For users with fast download speeds, this may be longer than is necessary. In order to reduce the sleep time after network requests, set the `sleep_time` attribute of `Options` to something more appropriate for your internet connection.\n\n```python\nimport hemnes\n...\n# setting required keywords\noptions = hemnes.Options()\noptions.sleep_time = 1\n# hemnes will now wait only 1 second for DOM to be loaded for\n# newly retrieved pages. Users should set sleep_time to an\n# appropriate amount of time based on their internet connection.\n# The default setting of 3-seconds should be fine for almost all users\nresults = hemnes.process_query('chair', options)\n```\n\n#### Using Product's Tag Field\n\nThe `tag` field can be set for all returned `Product` for a given call to `process_query` by setting it in `Options`. `tag` should be of type `str`.\n\n```python\nimport hemnes\n...\n# setting the tag attribute\noptions = hemnes.Options()\noptions.tag = 'chair'\n# all of the products returned in results will have their tag field\n# set to the string \"chair\"\nresults = hemnes.process_query('chair', options)\n```\n\n#### Writing Results to JSON or CSV\n\nStoring scraped results to JSON or CSV can be done by setting the appropriate paths to the files using `Options`.\nHemnes will delete an existing file if the path already exists.\n\nNote: any `None` fields will be written as `null` in JSON, or left empty in CSV\n\n```python\nimport hemnes\n...\noptions = hemnes.Options()\n# setting the path to a JSON dump file\noptions.json_dump = 'path_to_json_file.json'\n# setting the path to a CSV dump file\noptions.csv_dump = 'path_to_csv_file.csv'\n# results will be written to the specified json or csv files\nresults = hemnes.process_query('chair', options)\n```\n\n# Tests\n\nTests are broken into `test_isolated` and `test_integrated`. `test_isolated` are, as they sound, true unit-tests for individual functionality. `test_integrated` are tests for higher-level functionality that depends on some of the lower level functionality provided by functions tested in `test_isolated`.\n\nNote: `test_integrated` take a bit of time to execute as they go through the entire process of retrieving product data from start to finish\n\nTo run the tests clone the repository and run using **pytest**\n\n```bash\n# install pytest if you do not have pytest installed\npip3 install pytest\n# clone the repository\ngit clone https://github.com/sayeefrmoyen/hemnes.git\ncd hemnes\n# --verbose flag is optional - provides helpful console output\npytest --verbose # run all of the tests\npytest test/test_isolated.py --verbose # only run isolation tests\npytest test/test_integrated.py --verbose # only run intregration tests\n```\n\n# What's Next\n\nI'm ok with where this is now - if anyone requests more features I will look into them, but otherwise I will be maintaining hemnes as-is.\n\n# Release History\n\n* 1.2 - add saving to csv\n* 1.1 - add saving to json\n* 1.0 - first stable, tested release\n* 0.*.\\* - pre-test releases\n\n# License\n\nDistributed under the MIT License. See LICENSE for more information.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/sayeefrmoyen/hemnes", "keywords": "scraping ikea ikea-scraping python3 beautifulsoup,beautiful-soup", "license": "", "maintainer": "", "maintainer_email": "", "name": "hemnes", "package_url": "https://pypi.org/project/hemnes/", "platform": "", "project_url": "https://pypi.org/project/hemnes/", "project_urls": { "Homepage": "https://github.com/sayeefrmoyen/hemnes" }, "release_url": "https://pypi.org/project/hemnes/1.2.2/", "requires_dist": [ "selenium", "bs4", "pytest" ], "requires_python": ">=3", "summary": "Ikea product scraper", "version": "1.2.2" }, "last_serial": 5274362, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "fe10f97209b787220352117d503d6b3e", "sha256": "5c34a6ed4a6390a03ac82d95767bdcd8440ab27e1074067c5a3a05c94d0d8981" }, "downloads": -1, "filename": "hemnes-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fe10f97209b787220352117d503d6b3e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 3725, "upload_time": "2019-03-26T02:35:11", "url": "https://files.pythonhosted.org/packages/f9/b3/cd9d4dd474da76eac9ae2764b5e8978292729d824d570814784861ba6483/hemnes-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a6c91149283137c7c73b2e1cb2208f81", "sha256": "ff8613fb7ee6099e866f84ff0ed20e5ea167440f2585c1c2c538dc6c30380ff2" }, "downloads": -1, "filename": "hemnes-0.1.0.tar.gz", "has_sig": false, "md5_digest": "a6c91149283137c7c73b2e1cb2208f81", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 3252, "upload_time": "2019-03-26T02:35:15", "url": "https://files.pythonhosted.org/packages/0f/1c/fcb60c4dc8d307f50c4571f234412d5deb0a39fb5b2e80c0c3a96b72b9d4/hemnes-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "7b9cd27f6f5281c1b923002b52253cf2", "sha256": "c85a1718f3a6d379936d3a552fee2726ad2cc71f96fe59626766ecead5055ef1" }, "downloads": -1, "filename": "hemnes-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7b9cd27f6f5281c1b923002b52253cf2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 5020, "upload_time": "2019-03-26T02:41:14", "url": "https://files.pythonhosted.org/packages/83/58/592f5c6a0187645ee093b7fbad088b02a3e57a10c0332d213b2196561ea8/hemnes-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f370daf753ed6c489f92e77529623759", "sha256": "3e662967a073ee383d6c5387ebe0126023bca7c91fc2c9f01888635dd53ac0fb" }, "downloads": -1, "filename": "hemnes-0.1.1.tar.gz", "has_sig": false, "md5_digest": "f370daf753ed6c489f92e77529623759", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 4113, "upload_time": "2019-03-26T02:41:17", "url": "https://files.pythonhosted.org/packages/50/d3/43ae03274e7f98f560d07ab47ae47f1e92cf1cd34c205a6051ddceff6677/hemnes-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "cc03291959d1eb0e1c35cdc1106b3d8a", "sha256": "292074be280429d82275d16748b00f1c0f820a053d77f368f6daeb9fd78fedb7" }, "downloads": -1, "filename": "hemnes-0.1.10-py3-none-any.whl", "has_sig": false, "md5_digest": "cc03291959d1eb0e1c35cdc1106b3d8a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 12070, "upload_time": "2019-04-13T17:44:41", "url": "https://files.pythonhosted.org/packages/0d/64/bbd0fa6cccc8836dab4602809cb5462ef5abd963410e9bb36f4cfc9448be/hemnes-0.1.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9ff190cbda43017a39e19f023f99ece7", "sha256": "ba7b7259721209ee9eda75d9ff84ede3caabafedcdb2102ea1c406f4c976784d" }, "downloads": -1, "filename": "hemnes-0.1.10.tar.gz", "has_sig": false, "md5_digest": "9ff190cbda43017a39e19f023f99ece7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 12342, "upload_time": "2019-04-13T17:44:43", "url": "https://files.pythonhosted.org/packages/13/16/219a4d935e8b47c066ab8c4553042017218477e1506f107040e87e789962/hemnes-0.1.10.tar.gz" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "68cff5c221668584556121fac05ac395", "sha256": "b4afe62a05429b445ffd80c89f03aec60d76b2911b1d661b0ed7ad0e3caf90d2" }, "downloads": -1, "filename": "hemnes-0.1.11-py3-none-any.whl", "has_sig": false, "md5_digest": "68cff5c221668584556121fac05ac395", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 12099, "upload_time": "2019-04-15T01:01:16", "url": "https://files.pythonhosted.org/packages/05/4a/ac88951f339b0a8853d4d586e82a7d9f8c59c9d4869b87a2c59a2bf2b1ad/hemnes-0.1.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc5ccefa8fb8702f066793cec014e5f6", "sha256": "ffd87f9e6018469574810e625bd8b7cc23d29503246f52c245adca3879166769" }, "downloads": -1, "filename": "hemnes-0.1.11.tar.gz", "has_sig": false, "md5_digest": "fc5ccefa8fb8702f066793cec014e5f6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 12282, "upload_time": "2019-04-15T01:01:17", "url": "https://files.pythonhosted.org/packages/71/38/3ea573da5453e08069a730a2edb51e81f4e84f7f051459cd362a6fe6d607/hemnes-0.1.11.tar.gz" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "0a1135e491b7c061e6e9191b9460dad5", "sha256": "55bae5a7da0d57d14f0eaa0a474d32864ca26d1a20031584b3b49deb8c131322" }, "downloads": -1, "filename": "hemnes-0.1.12-py3-none-any.whl", "has_sig": false, "md5_digest": "0a1135e491b7c061e6e9191b9460dad5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 17000, "upload_time": "2019-04-22T23:45:00", "url": "https://files.pythonhosted.org/packages/78/17/52a169280f0ab9fe21289acec1de627a387afdcc17d93a465668be05cca7/hemnes-0.1.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1a31828262cc9f1dca15b0baf0c0613a", "sha256": "85cfe8ec94aafc6fa7f7525a0e9e7da4db9cc0d26d0eb92e65644da4873cdab5" }, "downloads": -1, "filename": "hemnes-0.1.12.tar.gz", "has_sig": false, "md5_digest": "1a31828262cc9f1dca15b0baf0c0613a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 16103, "upload_time": "2019-04-22T23:45:01", "url": "https://files.pythonhosted.org/packages/fa/87/defcf765df56dacf28f7c80d1c181ccdb22d21e5eb57583ee62b6d4c9bee/hemnes-0.1.12.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "488f19e65a0614bae2306aa47e983833", "sha256": "b517d310b50f7491ee8ebdea63192d4472e70c561fd20dc10cfd5d5afafffffc" }, "downloads": -1, "filename": "hemnes-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "488f19e65a0614bae2306aa47e983833", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 5023, "upload_time": "2019-03-26T13:53:48", "url": "https://files.pythonhosted.org/packages/a4/7a/497aca89cedbb6429ce40b84935cde4f7d0e6323ce4a7a11e4a581840b0d/hemnes-0.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0f3ca704b38d7db981e98575ff7d8bb1", "sha256": "d9d2789a5156fec5f1da4c09cb7526e6ff20c06c0ff95dd73998f0c68e7ab046" }, "downloads": -1, "filename": "hemnes-0.1.5.tar.gz", "has_sig": false, "md5_digest": "0f3ca704b38d7db981e98575ff7d8bb1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 4113, "upload_time": "2019-03-26T13:53:49", "url": "https://files.pythonhosted.org/packages/cd/3c/dcd7f984113241c584de9f1f8e19255225d701abb5e99fbbd6c2d918a147/hemnes-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "a3dbec7d53be8885827393e7f9a65555", "sha256": "e90af34459690f6df302d170b1ee20b84f0e8a588109c39a1d0ea4fc506c96cc" }, "downloads": -1, "filename": "hemnes-0.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "a3dbec7d53be8885827393e7f9a65555", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 5034, "upload_time": "2019-03-26T14:15:00", "url": "https://files.pythonhosted.org/packages/1c/32/7b12e9ae61bae09b9938d3352eb9656813326e310f3e21fec1d48426c209/hemnes-0.1.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2cf4d110496356d5297e99b9f6146e30", "sha256": "a413344fd8be1d9c7c3482e7716053bc6519f69c03a05e93cc20caa3fe51bde7" }, "downloads": -1, "filename": "hemnes-0.1.6.tar.gz", "has_sig": false, "md5_digest": "2cf4d110496356d5297e99b9f6146e30", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 4130, "upload_time": "2019-03-26T14:15:02", "url": "https://files.pythonhosted.org/packages/d6/f7/35da3b21a8972e495a79ce68dc8b79e19f3f13ee3aec43fe8c2e42e34d58/hemnes-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "104f7bec0f85673d4643df694cdc7ac4", "sha256": "4c1082409040e3c223b5a5e18aeea86dcc5f4aa8bb03836c881b8b61dcc0a57f" }, "downloads": -1, "filename": "hemnes-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "104f7bec0f85673d4643df694cdc7ac4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 5034, "upload_time": "2019-03-26T14:18:46", "url": "https://files.pythonhosted.org/packages/36/34/a4498e816493b36040ceeadf08a31213b642add0a76319a3492d853d8a74/hemnes-0.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ee7edc6f1458cd1c7bcc5f76781271fa", "sha256": "aa072d8ed913bd39e11e37810b7c0921f8748a210345412a6ad58897273f1960" }, "downloads": -1, "filename": "hemnes-0.1.7.tar.gz", "has_sig": false, "md5_digest": "ee7edc6f1458cd1c7bcc5f76781271fa", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 4130, "upload_time": "2019-03-26T14:18:48", "url": "https://files.pythonhosted.org/packages/86/cb/5a85bd6856590e92994072cb3d2e2c065d9d94d72229f53d27ff7b3a5aae/hemnes-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "eb8df7df2c52f3e16b5dd07f233e14a5", "sha256": "d4fccda4d674dc4ccbe6254fcb1ec0b3e11a0f65b8d64d9cef79fc79e9a3f09b" }, "downloads": -1, "filename": "hemnes-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "eb8df7df2c52f3e16b5dd07f233e14a5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 5037, "upload_time": "2019-03-26T14:28:20", "url": "https://files.pythonhosted.org/packages/5b/71/89d21726635bd96ddd439ce6ed632157967ee678fb6b004f5c585e9bed4c/hemnes-0.1.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d548a525cae9b31bb5486f8531198cb1", "sha256": "2b40be241e8ab8b488a25d9030e4ed1fc4a325574762adb7a2a78b196cb18f7b" }, "downloads": -1, "filename": "hemnes-0.1.8.tar.gz", "has_sig": false, "md5_digest": "d548a525cae9b31bb5486f8531198cb1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 4126, "upload_time": "2019-03-26T14:28:22", "url": "https://files.pythonhosted.org/packages/b6/eb/5b7d08eba870e0fe54e7652077ecfb0eeb22a2c426fc88cc3d99cdc9ccea/hemnes-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "e52da91f6267b26ceec61dc65deb5a39", "sha256": "3eb0f915b07898e8196b0133795427c59e5231f6e199e528d3b501724b304e6a" }, "downloads": -1, "filename": "hemnes-0.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "e52da91f6267b26ceec61dc65deb5a39", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 10195, "upload_time": "2019-03-26T14:39:23", "url": "https://files.pythonhosted.org/packages/d0/16/b615dbe973292869df6a1b4db5a7af64212c8633ab2fd93c4014c7fbecbd/hemnes-0.1.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8555e758f5bd88a1975e0bd0c20f8180", "sha256": "6eb8c407fee2bb51a17d6b7dfb10dbf4cb5df72722f37fadf10b63206c24a052" }, "downloads": -1, "filename": "hemnes-0.1.9.tar.gz", "has_sig": false, "md5_digest": "8555e758f5bd88a1975e0bd0c20f8180", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 8799, "upload_time": "2019-03-26T14:39:25", "url": "https://files.pythonhosted.org/packages/41/76/e093fd8a7864cc6d7c5eb86f354934529ab97e5078c092e10177f6138368/hemnes-0.1.9.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "543e314472fb7dcf3fead8e6588e824e", "sha256": "7507b8b39bd6da11c8a100f5c65e6018e100db543f839c8662d0aba150eb8dbe" }, "downloads": -1, "filename": "hemnes-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "543e314472fb7dcf3fead8e6588e824e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 19339, "upload_time": "2019-04-23T07:02:23", "url": "https://files.pythonhosted.org/packages/ff/2a/9a66bcbc24e805dbd85b2a478eae494d7ddbddbe7aa5acaae326cefe1eda/hemnes-1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2224fb3aebb87c5bf10acca7b76e1c01", "sha256": "904a17bc020c5eea1dd5b4994547a594dbb61d1754b206e882296e03df06561e" }, "downloads": -1, "filename": "hemnes-1.0.tar.gz", "has_sig": false, "md5_digest": "2224fb3aebb87c5bf10acca7b76e1c01", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 20936, "upload_time": "2019-04-23T07:02:24", "url": "https://files.pythonhosted.org/packages/97/2f/eab792a0dd0a8ccb5102757fd162d6001782cb8d23cebd8bf0b3cf36e087/hemnes-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "549d912a9115a31c6cf1ff1fe19fffdb", "sha256": "61cbea8db7025d344ac5405a98c3b5c028723a2b3ab075835ae62c36f4132f0a" }, "downloads": -1, "filename": "hemnes-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "549d912a9115a31c6cf1ff1fe19fffdb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 19896, "upload_time": "2019-04-26T21:42:49", "url": "https://files.pythonhosted.org/packages/63/fe/10a70b59907e9e95f9bc6454ecf29d8add3ba552d98cfb8ab6b12b78eadd/hemnes-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "20918cbbcb42cf947a30b98e0a332dd9", "sha256": "ad9b92eff1e5e49c414739bdd3422bf47568910b47914ce796fe7b4def6dbc63" }, "downloads": -1, "filename": "hemnes-1.1.tar.gz", "has_sig": false, "md5_digest": "20918cbbcb42cf947a30b98e0a332dd9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 22140, "upload_time": "2019-04-26T21:42:57", "url": "https://files.pythonhosted.org/packages/aa/9d/0a5bfa9e2cb6fc00383e7f9c063a1b009c7d7ee423eeab2a4795685de889/hemnes-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "e121e7f894b6d6bcbc70f4e425cde94c", "sha256": "b3d7bf405f8192c65c6d1070ce5a61b2d94d269f05d84b945956bd77e1b60e97" }, "downloads": -1, "filename": "hemnes-1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e121e7f894b6d6bcbc70f4e425cde94c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 20288, "upload_time": "2019-04-28T19:06:53", "url": "https://files.pythonhosted.org/packages/50/7a/50741daf3bbff7fe1ae4d60b04db73d26ac649d66356145d9820aa9120b6/hemnes-1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "776f371948cdf4094769f4f78c6049c3", "sha256": "d02b9590f4443b8f7233b0a22b88588e780985a9fb40c15285ce983d67f09071" }, "downloads": -1, "filename": "hemnes-1.2.tar.gz", "has_sig": false, "md5_digest": "776f371948cdf4094769f4f78c6049c3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 22633, "upload_time": "2019-04-28T19:06:57", "url": "https://files.pythonhosted.org/packages/66/bf/0ad0b27bc5df61014cd767512abb873e8db63af45e0b002761817a01deed/hemnes-1.2.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "da0b528d080c3841a8f7ac300c27586d", "sha256": "9ea7ecd61a265ab35973ac17a1d5dcc257c5d5a09603abdf1cb6b3f4582de591" }, "downloads": -1, "filename": "hemnes-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "da0b528d080c3841a8f7ac300c27586d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 20350, "upload_time": "2019-04-28T19:26:19", "url": "https://files.pythonhosted.org/packages/3b/a6/60dcf48650b1704f7b9fb8ef4ed334f9498839956ecc96faffb355ba5839/hemnes-1.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "630c7c7221780d02efcf423492558c56", "sha256": "36322fe8a40d15a9359bbfa7138d86f7f9d06da2e1c7386cb9023c5139524830" }, "downloads": -1, "filename": "hemnes-1.2.1.tar.gz", "has_sig": false, "md5_digest": "630c7c7221780d02efcf423492558c56", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 22731, "upload_time": "2019-04-28T19:26:23", "url": "https://files.pythonhosted.org/packages/8b/d2/7425a0e951d2c8bdcdd6794a52cd09f8f64a98929de1cf47a3ea3d7e1311/hemnes-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "adf6eb05ea22d65a1a76e49a73eb9f5e", "sha256": "a77f30197192e783b55bfe2e0ae2a2c6a5ed99ca4c72f6560b1dd34e52b9ce60" }, "downloads": -1, "filename": "hemnes-1.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "adf6eb05ea22d65a1a76e49a73eb9f5e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 20357, "upload_time": "2019-05-15T21:06:07", "url": "https://files.pythonhosted.org/packages/bd/b7/bc1a66d5c2267f7be2c6cfa91c551f951447979998744a2e45333c192f25/hemnes-1.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4284dab7e3a36870cc6216d81c63fdca", "sha256": "ce7dc8a54918e3d4c3fca4cc5762f5da29c46e1fc794b4d14444730b313b47c5" }, "downloads": -1, "filename": "hemnes-1.2.2.tar.gz", "has_sig": false, "md5_digest": "4284dab7e3a36870cc6216d81c63fdca", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 22311, "upload_time": "2019-05-15T21:06:09", "url": "https://files.pythonhosted.org/packages/2c/60/7e6caceb84302dcb13b8b7a4f751a736c4f6fb33ae42f06f554380561b1c/hemnes-1.2.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "adf6eb05ea22d65a1a76e49a73eb9f5e", "sha256": "a77f30197192e783b55bfe2e0ae2a2c6a5ed99ca4c72f6560b1dd34e52b9ce60" }, "downloads": -1, "filename": "hemnes-1.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "adf6eb05ea22d65a1a76e49a73eb9f5e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 20357, "upload_time": "2019-05-15T21:06:07", "url": "https://files.pythonhosted.org/packages/bd/b7/bc1a66d5c2267f7be2c6cfa91c551f951447979998744a2e45333c192f25/hemnes-1.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4284dab7e3a36870cc6216d81c63fdca", "sha256": "ce7dc8a54918e3d4c3fca4cc5762f5da29c46e1fc794b4d14444730b313b47c5" }, "downloads": -1, "filename": "hemnes-1.2.2.tar.gz", "has_sig": false, "md5_digest": "4284dab7e3a36870cc6216d81c63fdca", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 22311, "upload_time": "2019-05-15T21:06:09", "url": "https://files.pythonhosted.org/packages/2c/60/7e6caceb84302dcb13b8b7a4f751a736c4f6fb33ae42f06f554380561b1c/hemnes-1.2.2.tar.gz" } ] }