{ "info": { "author": "Guillaume Plique, Jules Farjas, Oubine Perrin, Benjamin Ooghe-Tabanou", "author_email": "kropotkinepiotr@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "[](https://travis-ci.org/medialab/ural)\n\n# Ural\n\nA helper library full of URL-related heuristics.\n\n## Installation\n\nYou can install `ural` with pip with the following command:\n\n```\npip install ural\n```\n\n## Usage\n\n### Functions\n\n*Generic functions*\n\n* [ensure_protocol](#ensure_protocol)\n* [get_domain_name](#get_domain_name)\n* [force_protocol](#force_protocol)\n* [is_url](#is_url)\n* [lru_from_url](#lru_from_url)\n* [normalize_url](#normalize_url)\n* [normalized_lru_from_url](#normalized_lru_from_url)\n* [strip_protocol](#strip_protocol)\n* [urls_from_html](#urls_from_html)\n* [urls_from_text](#urls_from_text)\n\n*Platform-specific functions*\n\n* [facebook](#facebook)\n * [convert_facebook_url_to_mobile](#convert_facebook_url_to_mobile)\n * [extract_user_from_url](#extract_user_from_url)\n\n### Classes\n\n* [LRUTrie](#LRUTrie)\n * [set](#set)\n * [match](#match)\n * [values](#values)\n\n---\n\n### Functions\n\n#### ensure_protocol\n\nFunction checking if the url has a protocol, and adding the given one if there is none.\n\n```python\nfrom ural import ensure_protocol\n\nensure_protocol('www2.lemonde.fr', protocol='https')\n>>> 'https://www2.lemonde.fr'\n```\n\n*Arguments*\n\n* **url** *string*: URL to format.\n* **protocol** *string*: protocol to use if there is none in **url**. Is 'http' by default.\n\n---\n\n#### get_domain_name\n\nFunction returning an url's domain name. This function is of course tld-aware and will return `None` if no valid domain name can be found.\n\n```python\nfrom ural import get_domain_name\n\nget_domain_name('https://facebook.com/path')\n>>> 'facebook.com'\n```\n\n*Arguments*\n\n* **url** *string*: Target url.\n\n---\n\n#### force_protocol\n\nFunction force-replacing the protocol of the given url.\n\n```python\nfrom ural import force_protocol\n\nforce_protocol('https://www2.lemonde.fr', protocol='ftp')\n>>> 'ftp://www2.lemonde.fr'\n```\n\n*Arguments*\n\n* **url** *string*: URL to format.\n* **protocol** *string*: protocol wanted in the output url. Is `'http'` by default.\n\n---\n\n#### is_url\n\nFunction returning True if its argument is a url.\n\n```python\nfrom ural import is_url\n\nis_url('https://www2.lemonde.fr')\n>>> True\n\nis_url('lemonde.fr/economie/article.php', require_protocol=False)\n>>> True\n\nis_url('lemonde.falsetld/whatever.html', tld_aware=True)\n>>> False\n```\n\n*Arguments*\n\n* **string** *string*: string to test.\n* **require_protocol** *bool* [`True`]: whether the argument has to have a protocol to be considered a url.\n* **tld_aware** *bool* [`False`]: whether to check if the url's tld actually exists or not.\n* **allow_spaces_in_path** *bool* [`False`]: whether the allow spaces in URL paths.\n* **only_http_https** *bool* [`True`]: whether to only allow the `http` and `https` protocols.\n\n---\n\n#### lru_from_url\n\nFunction returning url parts in hierarchical order.\n\n```python\nfrom ural import lru_from_url\n\nlru_from_url('http://www.lemonde.fr:8000/article/1234/index.html?field=value#2')\n>>> ['s:http', 't:8000', 'h:fr', 'h:lemonde', 'h:www', 'p:article', 'p:1234', 'p:index.html', 'q:field=value', 'f:2']\n```\n\n*Arguments*\n\n* **url** *string*: URL to parse.\n\n---\n\n#### normalize_url\n\nFunction normalizing the given url by stripping it of usually non-discriminant parts such as irrelevant query items or sub-domains etc.\n\nThis is a very useful utility when attempting to match similar urls written slightly differently when shared on social media etc.\n\n```python\nfrom ural import normalize_url\n\nnormalize_url('https://www2.lemonde.fr/index.php?utm_source=google')\n>>> 'lemonde.fr'\n```\n\n*Arguments*\n\n* **url** *string*: URL to normalize.\n* **sort_query** *bool* [`True`]: whether to sort query items.\n* **strip_authentication** *bool* [`True`]: whether to strip authentication.\n* **strip_fragment** *bool|str* [`'except-routing'`]: whether to strip the url's fragment. If set to `except-routing`, will only strip the fragment if the fragment is not deemed to be js routing (i.e. if it contains a `/`).\n* **strip_index** *bool* [`True`]: whether to strip trailing index.\n* **strip_lang_subdomains** *bool* [`False`]: whether to strip language subdomains (ex: 'fr-FR.lemonde.fr' to only 'lemonde.fr' because 'fr-FR' isn't a relevant subdomain, it indicates the language and the country).\n* **strip_trailing_slash** *bool* [`False`]: whether to strip trailing slash.\n\n---\n\n#### normalized_lru_from_url\n\nFunction normalizing url and returning its parts in hierarchical order.\n\n```python\nfrom ural import normalized_lru_from_url\n\nnormalized_lru_from_url('http://www.lemonde.fr:8000/article/1234/index.html?field=value#2')\n>>> ['t:8000', 'h:fr', 'h:lemonde', 'h:www', 'p:article', 'p:1234', 'q:field=value']\n```\n\n*Arguments*\n\nThis function accepts the same arguments as [normalize_url](#normalize_url).\n\n---\n\n#### strip_protocol\n\nFunction removing the protocol from the url.\n\n```python\nfrom ural import strip_protocol\n\nstrip_protocol('https://www2.lemonde.fr/index.php')\n>>> 'www2.lemonde.fr/index.php'\n```\n\n*Arguments*\n\n* **url** *string*: URL to format.\n\n---\n\n#### urls_from_html\n\nFunction returning an iterator over the urls present in the links of given HTML text.\n\n```python\nfrom ural import urls_from_html\n\nhtml = \"\"\"
Hey! Check this site: m\u00e9dialab
\"\"\"\n\nfor url in urls_from_html(html):\n print(url)\n>>> 'https://medialab.sciencespo.fr/'\n```\n\n*Arguments*\n\n* **string** *string*: html string.\n\n---\n\n#### urls_from_text\n\nFunction returning an iterator over the urls present in the string argument. Extracts only the urls with a protocol.\n\n```python\nfrom ural import urls_from_text\n\ntext = \"Hey! Check this site: https://medialab.sciencespo.fr/, it looks really cool. They're developing many tools on https://github.com/\"\n\nfor url in urls_from_text(text):\n print(url)\n>>> 'https://medialab.sciencespo.fr/'\n>>> 'https://github.com/'\n```\n\n*Arguments*\n\n* **string** *string*: source string.\n\n---\n\n### Facebook\n\n#### convert_facebook_url_to_mobile\n\nFunction returning the mobile version of the given Facebook url. Will raise an exception if a non-Facebook url is given.\n\n```python\nfrom ural.facebook import convert_facebook_url_to_mobile\n\nconvert_facebook_url_to_mobile('http://www.facebook.com/post/974583586343')\n>>> 'http://m.facebook.com/post/974583586343'\n```\n\n---\n\n#### extract_user_from_url\n\nFunction extracting user information from a facebook user url.\n\n```python\nfrom ural.facebook import extract_user_from_url\n\nextract_user_from_url('https://www.facebook.com/people/Sophia-Aman/102016783928989')\n>>> FacebookUser(id='102016783928989', handle=None, url='https://www.facebook.com/profile.php?id=102016783928989)\n\nextract_user_from_url('/annelaure.rivolu?rc=p&__tn__=R')\n>>> FacebookUser(id=None, handle='annelaure.rivolu', url='https://www.facebook.com/annelaure.rivolu)\n```\n\n---\n\n### Classes\n\n#### LRUTrie\n\nClass implementing a prefix tree (Trie) storing LRUs and their metadata, allowing to find the longest common prefix between two urls.\n\n##### set\n\nA function storing an url in a LRUTrie along with its metadata.\n\n```python\nfrom ural import LRUTrie\n\ntrie = LRUTrie()\ntrie.set('http://www.lemonde.fr', {'type': 'general press'})\n\ntrie.match('http://www.lemonde.fr')\n>>> {'type': 'general press'}\n```\n\n*Arguments*\n\n* **url** *string*: url to store in the LRUTrie.\n* **metadata** *dict*: metadata of the url.\n\n---\n\n##### match\n\nMethod returning the metadata of the given url as it is stored in the LRUTrie.\nIf the exact given url doesn't exist in the LRUTrie, it returns the metadata of the longest common prefix, or `None` if there is no common prefix.\n\n```python\nfrom ural import LRUTrie\n\ntrie = LRUTrie()\ntrie.set('http://www.lemonde.fr', {'media': 'lemonde'})\n\ntrie.match('http://www.lemonde.fr')\n>>> {'media': 'lemonde'}\ntrie.match('http://www.lemonde.fr/politique')\n>>> {'media': 'lemonde'}\n```\n\n*Arguments*\n\n* **url** *string*: url to match in the LRUTrie.\n\n---\n\n##### values\n\nMethod yielding the metadata of each url stored in the LRUTrie.\n\n```python\nfrom ural import LRUTrie\n\ntrie = LRUTrie()\ntrie.set('http://www.lemonde.fr', {'media' : 'lemonde'})\ntrie.set('http://www.lefigaro.fr', {'media' : 'lefigaro'})\ntrie.set('https://www.liberation.fr', {'media' : 'liberation'})\n\nfor value in trie.values():\n print(value)\n>>> {'media': 'lemonde'}\n>>> {'media': 'liberation'}\n>>> {'media': 'lefigaro'}\n```\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": "http://github.com/medialab/ural", "keywords": "url", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "ural", "package_url": "https://pypi.org/project/ural/", "platform": "", "project_url": "https://pypi.org/project/ural/", "project_urls": { "Homepage": "http://github.com/medialab/ural" }, "release_url": "https://pypi.org/project/ural/0.12.1/", "requires_dist": [ "phylactery (>=0.2.2)", "pycountry (>=18.12.8)", "tld (>=0.9.3)" ], "requires_python": ">=2.7", "summary": "A helper library full of URL-related heuristics.", "version": "0.12.1" }, "last_serial": 5995479, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "8d40932b659ee3dca96c2550f4dbea7d", "sha256": "00cb8cbf8682c671216b7caf5fc1c52a4a8f89be40b8bacfcc46504c7725db2b" }, "downloads": -1, "filename": "ural-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8d40932b659ee3dca96c2550f4dbea7d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 2995, "upload_time": "2018-05-18T13:51:01", "url": "https://files.pythonhosted.org/packages/28/9e/07421244ca603ff5089752e073816d9c6ce2a6098e64470246e68cbd116c/ural-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "86d5761148eca0378164033599844a7f", "sha256": "c1109a6c6e2d4628ffb07627e0478f1f64120ea5d4bb2e1e00bd410102539eab" }, "downloads": -1, "filename": "ural-0.0.1.tar.gz", "has_sig": false, "md5_digest": "86d5761148eca0378164033599844a7f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 2356, "upload_time": "2018-05-18T13:51:03", "url": "https://files.pythonhosted.org/packages/84/00/33c865c3b3dba6c71892ee6819b9ed9a0d54141f07b1868018f1bb6899b0/ural-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "12e02e52a801676d42dfd006a8f3c5dc", "sha256": "6fcc603d6103929603229c47364ce9cd4fa6758285fa389cd79b007864aed6fc" }, "downloads": -1, "filename": "ural-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "12e02e52a801676d42dfd006a8f3c5dc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 3130, "upload_time": "2018-05-29T09:39:15", "url": "https://files.pythonhosted.org/packages/31/c6/51d78f1fad0c7b85b65b5479d5cc28bc9260015c2ec6f74bb8eb259d21a4/ural-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "65011d52a763c1beb3f4742f66d7ee6a", "sha256": "7c4c7a2b3839420c2e8e561a7cfff12399d7bb686f7adaf7750a1d934d8017ac" }, "downloads": -1, "filename": "ural-0.0.2.tar.gz", "has_sig": false, "md5_digest": "65011d52a763c1beb3f4742f66d7ee6a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 2474, "upload_time": "2018-05-29T09:39:16", "url": "https://files.pythonhosted.org/packages/8a/ec/64b8975bb09fccb5c6d798f9afb8600ff2c2a4a2626e613a0ca1e0261f0e/ural-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "4c911568f3dda84a970186b187ee7a2d", "sha256": "1f7201ab3526d3d634cc7506db739999648976b59bfa58b8ea805459a784bbd2" }, "downloads": -1, "filename": "ural-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "4c911568f3dda84a970186b187ee7a2d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 3271, "upload_time": "2018-06-08T12:53:19", "url": "https://files.pythonhosted.org/packages/1e/99/3f7e0f63fabf2f3d73b4ddc2cd42fe21ccf024a99d5c218e8186f7af12e0/ural-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b4b49b243f0ea6b407ec1a71ba03b14d", "sha256": "8f06c75227eeeeb8542ad2abfb60dab947374ec7f4f0b2cc4a6077d930924291" }, "downloads": -1, "filename": "ural-0.0.3.tar.gz", "has_sig": false, "md5_digest": "b4b49b243f0ea6b407ec1a71ba03b14d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 2613, "upload_time": "2018-06-08T12:53:20", "url": "https://files.pythonhosted.org/packages/60/9f/d85d58abb4f36e6deb3b1b258efc6a11e1471aecfbeffdb6b0395267b576/ural-0.0.3.tar.gz" } ], "0.10.0": [ { "comment_text": "", "digests": { "md5": "78d4ec209f3961334572a708c1bb3ca9", "sha256": "f0b1abf09967a593df6470ccf327c2cfd2b355ff82c8e85de813f5303b73d3de" }, "downloads": -1, "filename": "ural-0.10.0-py3-none-any.whl", "has_sig": false, "md5_digest": "78d4ec209f3961334572a708c1bb3ca9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 17488, "upload_time": "2019-10-02T13:37:05", "url": "https://files.pythonhosted.org/packages/c9/de/096e59e5cb5b1681320248caafa1c4d63d5d377eab1b82e38b88c5b1cd77/ural-0.10.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c33254e2fdab94c43341b64ad68d493b", "sha256": "cfd39f4c5d41883dcab8d9c62bc528193ec9573d7593a75aee7e869749971222" }, "downloads": -1, "filename": "ural-0.10.0.tar.gz", "has_sig": false, "md5_digest": "c33254e2fdab94c43341b64ad68d493b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 12982, "upload_time": "2019-10-02T13:37:07", "url": "https://files.pythonhosted.org/packages/3b/12/0ec53789bb92cce307f0ec3950cb800485d48ca34c8e137679a450358482/ural-0.10.0.tar.gz" } ], "0.10.1": [ { "comment_text": "", "digests": { "md5": "8e44c48c8cee35d6884c55458dd3c3ef", "sha256": "789fe2c64ce6bedfb09452708a9f1f75d2e7fd490a899472763e45e8a912774f" }, "downloads": -1, "filename": "ural-0.10.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8e44c48c8cee35d6884c55458dd3c3ef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 18029, "upload_time": "2019-10-02T14:39:41", "url": "https://files.pythonhosted.org/packages/91/25/aa0e930c4de9c7b76b5f216da38602c27055eaf4190336111e00522854c5/ural-0.10.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1dc408683a452d5666fa2bb02b60745c", "sha256": "8d8a7333b9248d0e7c672649f0a6dd980f6cb60971000bcf9b6d1dd193674d52" }, "downloads": -1, "filename": "ural-0.10.1.tar.gz", "has_sig": false, "md5_digest": "1dc408683a452d5666fa2bb02b60745c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 13481, "upload_time": "2019-10-02T14:39:43", "url": "https://files.pythonhosted.org/packages/d5/11/9d658ebae288c3e1da2a475801a49bee9008a21543a31b0dce95c4a543b0/ural-0.10.1.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "5259d8c88a593e7dbddced0db79f2c60", "sha256": "6d327e980ff50c1e78d41c14d40aa23a2c1b6fee8f105f332432ebd5489740fe" }, "downloads": -1, "filename": "ural-0.11.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5259d8c88a593e7dbddced0db79f2c60", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 18230, "upload_time": "2019-10-06T10:38:19", "url": "https://files.pythonhosted.org/packages/f8/1c/39faaf143a0b2ee19525f910c0a78e1883ea3f3a34e7ddf64b0265257042/ural-0.11.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf1125bc21910fd31f95d86b38017bb5", "sha256": "7e75f391a1207150a047febb7e0db96f114d6e8c4e5fbe2ca04694f315896011" }, "downloads": -1, "filename": "ural-0.11.0.tar.gz", "has_sig": false, "md5_digest": "cf1125bc21910fd31f95d86b38017bb5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 13344, "upload_time": "2019-10-06T10:38:22", "url": "https://files.pythonhosted.org/packages/8c/e6/9c3d760e7b2eaf082cd26af99c8c315586dfde39f394d8871449bb482f82/ural-0.11.0.tar.gz" } ], "0.12.0": [ { "comment_text": "", "digests": { "md5": "37cf282157126ae8a55d49840bfabceb", "sha256": "1b2f4dc79060120f2d46f60d76a5aa13795f75cfa4c4d52cfc3fbc7f72a77f38" }, "downloads": -1, "filename": "ural-0.12.0-py3-none-any.whl", "has_sig": false, "md5_digest": "37cf282157126ae8a55d49840bfabceb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 14725, "upload_time": "2019-10-15T20:39:15", "url": "https://files.pythonhosted.org/packages/7e/56/babb25febb75ec0000e656407ee6c4e510479f5f8fc967b02a950ab046b2/ural-0.12.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "590c5c69af53e756ae0121013156fa10", "sha256": "2e8076cbbc86f5d42aeeaa1ecdb69dc2926ba90880c91766ff0b79a4a5bd0005" }, "downloads": -1, "filename": "ural-0.12.0.tar.gz", "has_sig": false, "md5_digest": "590c5c69af53e756ae0121013156fa10", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 11208, "upload_time": "2019-10-15T20:39:18", "url": "https://files.pythonhosted.org/packages/52/83/ef96a9c232eb65c7819e4489c75e22966f4655235882b10af3723a9c4a08/ural-0.12.0.tar.gz" } ], "0.12.1": [ { "comment_text": "", "digests": { "md5": "35915716f530913988649d46c82ce259", "sha256": "3cdb6105d55aed8c3d11382e9856593c6435593e143796de781de656a8a49057" }, "downloads": -1, "filename": "ural-0.12.1-py3-none-any.whl", "has_sig": false, "md5_digest": "35915716f530913988649d46c82ce259", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 14891, "upload_time": "2019-10-18T12:47:31", "url": "https://files.pythonhosted.org/packages/47/40/f9f761a9bc08be25950ee92fcb4d32605651154ce7554eebe6b9fc7e0780/ural-0.12.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe811ca1965efbb35b7f727cbde721f9", "sha256": "83318baae2f9ec483547691c85b60012a2f7e1e4d32586aa5c4df42a53145245" }, "downloads": -1, "filename": "ural-0.12.1.tar.gz", "has_sig": false, "md5_digest": "fe811ca1965efbb35b7f727cbde721f9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 11896, "upload_time": "2019-10-18T12:47:33", "url": "https://files.pythonhosted.org/packages/b1/59/db051a3eb0d275aff51441dc02028c2222ef1099dc234be1af0974b921a0/ural-0.12.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "6540f6197ddced0207333be8df931ea8", "sha256": "c5135a0c2c23cff6360213957a889eeec68a737280af49adabb229819901e60e" }, "downloads": -1, "filename": "ural-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6540f6197ddced0207333be8df931ea8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 6055, "upload_time": "2018-11-12T15:19:24", "url": "https://files.pythonhosted.org/packages/c4/69/8d26a2062729f56e11fdd67cffd3a4b93e328ec8882a1705ad74b21ae337/ural-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b28b09e0c7a3b7fbb592bbfe02335f8", "sha256": "8178eeb05990c646a3aa72536a7f76453066c8259e7d869a3f53bdcba8af2ecc" }, "downloads": -1, "filename": "ural-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4b28b09e0c7a3b7fbb592bbfe02335f8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 3407, "upload_time": "2018-11-12T15:19:25", "url": "https://files.pythonhosted.org/packages/ac/f6/ff503152a11ad311b7f598b876a3d8b270c94a828f09c11dce4e49e5eca1/ural-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "1bf9ffd1a43f44dc5946b7e2010796cd", "sha256": "ef2c2f1dc7004fa0b8bd2968c59d3e00c4bea45cf113c4ad6308eafed014567b" }, "downloads": -1, "filename": "ural-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1bf9ffd1a43f44dc5946b7e2010796cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 7017, "upload_time": "2018-12-07T17:38:54", "url": "https://files.pythonhosted.org/packages/ed/64/eeabd73eea9049350824ab1cd025450a613ee40028e7f3f18f53a642a179/ural-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2c3ffbe8bbd634dbed4e3599b450b6cc", "sha256": "f7c6a742a3f01d812f0af287739ee696d60ef417dc632e6d3bd597832b01d95b" }, "downloads": -1, "filename": "ural-0.3.0.tar.gz", "has_sig": false, "md5_digest": "2c3ffbe8bbd634dbed4e3599b450b6cc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4142, "upload_time": "2018-12-07T17:38:56", "url": "https://files.pythonhosted.org/packages/d2/e0/3c2f69ad25188c0ae8ab86aebdab33eff6b15b24b039df07a17bb053c3aa/ural-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "abe1bd726844cac86b4d07d2bdefc766", "sha256": "e3735b44ea753e3d675fd74955cd288850084aa803e5ba5413a0822c2efa5464" }, "downloads": -1, "filename": "ural-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "abe1bd726844cac86b4d07d2bdefc766", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 7182, "upload_time": "2018-12-11T11:06:56", "url": "https://files.pythonhosted.org/packages/37/3e/9b5d385adeac56f3c1a99a86f2bf4163d094a47a06ba2db956de1b53cb28/ural-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "80e7ac467093ca9977851669ac67930d", "sha256": "dff1512b31d62f5ae862647f1d47d61e31ea56fda34157082dca1d1d2238fd14" }, "downloads": -1, "filename": "ural-0.4.0.tar.gz", "has_sig": false, "md5_digest": "80e7ac467093ca9977851669ac67930d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 4311, "upload_time": "2018-12-11T11:06:57", "url": "https://files.pythonhosted.org/packages/d0/7b/dd36c65908f5194556e6fd13b0562a758db765efc2dc11a0fd4f070a516b/ural-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "1b6fc8e3377b4da073207283af038727", "sha256": "eb81461946f25a7bc978db2bbdbb1382ee9fd9b05a25bfab68ce6e6dad900d8c" }, "downloads": -1, "filename": "ural-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1b6fc8e3377b4da073207283af038727", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 8543, "upload_time": "2018-12-14T10:44:43", "url": "https://files.pythonhosted.org/packages/07/36/fdf89959dacf120e789b0519fbf9dcc9631a30b646bded93d0e42948c10c/ural-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f442fee0f4a0086c403b77000118c0ef", "sha256": "b8484b089874da5a81dc436618821dd947c3feda966e664571745a3854321727" }, "downloads": -1, "filename": "ural-0.5.0.tar.gz", "has_sig": false, "md5_digest": "f442fee0f4a0086c403b77000118c0ef", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 5133, "upload_time": "2018-12-14T10:44:45", "url": "https://files.pythonhosted.org/packages/e4/6a/2d1ebbb745907020b4f30c1ca84e6bf74e46945a007376599faac4e0a8da/ural-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "e01465673ed9f1076be02e8622731a27", "sha256": "87bc6a9ff7690b54e70064087deaa2107207161ebccd8d40910c9ac0925e061b" }, "downloads": -1, "filename": "ural-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e01465673ed9f1076be02e8622731a27", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 14335, "upload_time": "2019-02-25T19:38:07", "url": "https://files.pythonhosted.org/packages/61/f2/49d5d3f74064da237de39b99e7cf2c5391e20f175acc2b569d68c8662564/ural-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a49a17a96fd993fb9b3352bd59bdbfb8", "sha256": "347c602af49541e6cf33b9e67f3f108aee0b88bbc9996e300368200499d6d272" }, "downloads": -1, "filename": "ural-0.6.0.tar.gz", "has_sig": false, "md5_digest": "a49a17a96fd993fb9b3352bd59bdbfb8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 9653, "upload_time": "2019-02-25T19:38:09", "url": "https://files.pythonhosted.org/packages/cf/8d/fba785e65d257ef054223c2a18fe60a894eb0dd6255315941247958c405a/ural-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "01ea2728eade808d31e9e46b4886bb3d", "sha256": "ea9075c171dae6d70bfee85eb75eaee4079c43647f9761bba13063931757eb57" }, "downloads": -1, "filename": "ural-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "01ea2728eade808d31e9e46b4886bb3d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 14362, "upload_time": "2019-04-03T13:57:12", "url": "https://files.pythonhosted.org/packages/d0/d2/32a4eb409316b846b52732470c35c98626a52036867f8e7e51abc098e012/ural-0.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27f0a412dcebe9e77972e005e3c29b3a", "sha256": "fa63ef169efa5ca0e70fdf11b482dec01a10d37b1bc299618e8d657ae223a1da" }, "downloads": -1, "filename": "ural-0.6.1.tar.gz", "has_sig": false, "md5_digest": "27f0a412dcebe9e77972e005e3c29b3a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 9673, "upload_time": "2019-04-03T13:57:13", "url": "https://files.pythonhosted.org/packages/cf/7e/699705d9b91ed6e35c1ec41b56f0b5696dc0cc6ce95874884e48d3a8fb5d/ural-0.6.1.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "71135aeb587901a266d8369172894be3", "sha256": "bc7be36f19bc68febadac8c3978aa5f9a1b5840c192d52f86a428cf44eaa8e1a" }, "downloads": -1, "filename": "ural-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "71135aeb587901a266d8369172894be3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 15445, "upload_time": "2019-04-17T12:20:31", "url": "https://files.pythonhosted.org/packages/d4/e6/46fe4c9eb0f62793250f98ad8ea328670b30a554f9aaa57cdff0485cf21a/ural-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7179bba54e58b359730100bc6204e75b", "sha256": "298c0bc241381a55a9f331c815f077444829a5c03e68b11582269ad218c1c60a" }, "downloads": -1, "filename": "ural-0.7.0.tar.gz", "has_sig": false, "md5_digest": "7179bba54e58b359730100bc6204e75b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 10294, "upload_time": "2019-04-17T12:20:33", "url": "https://files.pythonhosted.org/packages/d1/29/353336a136207dfd2f9743a8685eaa7890ebdd3d3da2e21b7762b941183c/ural-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "c74a38b2325b7513c3fd942243d0899a", "sha256": "160c0df7a511c3c946083d04b3fbc9e26af51891148a69299ec8ad638c8b172c" }, "downloads": -1, "filename": "ural-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c74a38b2325b7513c3fd942243d0899a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 15822, "upload_time": "2019-04-30T12:28:49", "url": "https://files.pythonhosted.org/packages/b9/07/2836dfe079234582c64a242e8147a6f16f36b66d04d026be06afe2c932ba/ural-0.8.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "88e9a1b23f3d5747b06a5674555bcbf8", "sha256": "4a71055c26495b43fa7f4d1e412878b9c560c76ea2cca5090929eab6933a8e7f" }, "downloads": -1, "filename": "ural-0.8.0.tar.gz", "has_sig": false, "md5_digest": "88e9a1b23f3d5747b06a5674555bcbf8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 10744, "upload_time": "2019-04-30T12:29:00", "url": "https://files.pythonhosted.org/packages/f4/e5/a271a9f3c09f5ab118bade0be5451084882b62d366453410b5b99716dc20/ural-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "59327ee95ccba10a82f52b13047478b7", "sha256": "a119da6f87477a5078347feb24433f9772ff83ecb44484d46575cf1696c7c391" }, "downloads": -1, "filename": "ural-0.9.0-py2-none-any.whl", "has_sig": false, "md5_digest": "59327ee95ccba10a82f52b13047478b7", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7", "size": 17306, "upload_time": "2019-09-12T14:48:27", "url": "https://files.pythonhosted.org/packages/76/c5/dad16f2209d349382399a397d7b48efeb25ffbb9f5746b0a56fd36bc9a97/ural-0.9.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "783511326a4627581a52d8d92810743b", "sha256": "6d2d22edd739131562db30d6b59de4ae6df404d3464caa4cf3be53e33a2faf58" }, "downloads": -1, "filename": "ural-0.9.0.tar.gz", "has_sig": false, "md5_digest": "783511326a4627581a52d8d92810743b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 12290, "upload_time": "2019-09-12T14:48:29", "url": "https://files.pythonhosted.org/packages/8d/1a/a55321eefe2a11952939c061467755bbb0efafe278341985aebf3333527c/ural-0.9.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "35915716f530913988649d46c82ce259", "sha256": "3cdb6105d55aed8c3d11382e9856593c6435593e143796de781de656a8a49057" }, "downloads": -1, "filename": "ural-0.12.1-py3-none-any.whl", "has_sig": false, "md5_digest": "35915716f530913988649d46c82ce259", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7", "size": 14891, "upload_time": "2019-10-18T12:47:31", "url": "https://files.pythonhosted.org/packages/47/40/f9f761a9bc08be25950ee92fcb4d32605651154ce7554eebe6b9fc7e0780/ural-0.12.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe811ca1965efbb35b7f727cbde721f9", "sha256": "83318baae2f9ec483547691c85b60012a2f7e1e4d32586aa5c4df42a53145245" }, "downloads": -1, "filename": "ural-0.12.1.tar.gz", "has_sig": false, "md5_digest": "fe811ca1965efbb35b7f727cbde721f9", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7", "size": 11896, "upload_time": "2019-10-18T12:47:33", "url": "https://files.pythonhosted.org/packages/b1/59/db051a3eb0d275aff51441dc02028c2222ef1099dc234be1af0974b921a0/ural-0.12.1.tar.gz" } ] }