{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "[![Documentation Status](https://readthedocs.org/projects/parsr/badge/?version=latest)](https://parsr.readthedocs.io/en/latest/?badge=latest)\n[![Test Status](https://travis-ci.org/csams/parsr.svg?branch=master)](https://travis-ci.org/csams/parsr.svg?branch=master)\n[![Coverage Status](https://coveralls.io/repos/github/csams/parsr/badge.svg?branch=master)](https://coveralls.io/github/csams/parsr?branch=master)\n\n# parsr\nparsr is a little library for parsing simple, mostly context free grammars that\nmight require knowledge of indentation or matching tags.\n\nIt contains a small set of combinators that perform recursive decent with\nbacktracking. Fancy tricks like rewriting left recursions and optimizations like\n[packrat](https://pdos.csail.mit.edu/~baford/packrat/thesis/thesis.pdf) are not\nimplemented since the goal is a library that's small yet sufficient for parsing\nnon-standard configuration files. It also includes a generic data model that\nparsers can target to take advantage of an embedded query system.\n\nTo see how a handwritten parser might evolve to something like this project,\ncheck out the [lesson](https://github.com/csams/parsr/blob/master/parsr/lesson).\n\n[parser.query](https://github.com/csams/parsr/blob/master/parsr/query) contains \nthe common data model and query system.\n\n## Install\n1. Ensure python2.7, python3.6, or python3.7 is installed.\n2. `python3.7 -m venv myproject && cd myproject`\n3. `source bin/activate`\n4. `pip install parsr`\n\n## Examples\n* [Arithmetic](https://github.com/csams/parsr/blob/master/parsr/examples/arith.py)\n* [Generic Key/Value Pair configuration](https://github.com/csams/parsr/blob/master/parsr/examples/kvpairs.py)\n* [INI configuration](https://github.com/csams/parsr/blob/master/parsr/examples/iniparser.py) is an example of significant indentation.\n* [json](https://github.com/csams/parsr/blob/master/parsr/examples/json_parser.py)\n* [httpd configuration](https://github.com/csams/parsr/blob/master/parsr/examples/httpd_conf.py) is an example of matching starting and ending tags.\n* [nginx configuration](https://github.com/csams/parsr/blob/master/parsr/examples/nginx_conf.py)\n* [corosync configuration](https://github.com/csams/parsr/blob/master/parsr/examples/corosync_conf.py)\n* [multipath configuration](https://github.com/csams/parsr/blob/master/parsr/examples/multipath_conf.py)\n* [logrotate configuration](https://github.com/csams/parsr/blob/master/parsr/examples/logrotate_conf.py)\n\n## Primitives\nThese are the building blocks for matching individual characters, sets of\ncharacters, and a few convenient objects like numbers. All matching is case\nsensitive except for the `ignore_case` option with `Literal`.\n\n### Char\nMatch a single character.\n```python\na = Char(\"a\") # parses a single \"a\"\nval = a(\"a\") # produces an \"a\" from the data.\nval = a(\"b\") # raises an exception\n```\n\n### InSet\nMatch any single character in a set.\n```python\nvowel = InSet(\"aeiou\") # or InSet(set(\"aeiou\"))\nval = vowel(\"a\") # okay\nval = vowel(\"e\") # okay\nval = vowel(\"i\") # okay\nval = vowel(\"o\") # okay\nval = vowel(\"u\") # okay\nval = vowel(\"y\") # raises an exception\n```\n\n### String\nMatch one or more characters in a set. Matching is greedy.\n```python\nvowels = String(\"aeiou\")\nval = vowels(\"a\") # returns \"a\"\nval = vowels(\"u\") # returns \"u\"\nval = vowels(\"aaeiouuoui\") # returns \"aaeiouuoui\"\nval = vowels(\"uoiea\") # returns \"uoiea\"\nval = vowels(\"oouieaaea\") # returns \"oouieaaea\"\nval = vowels(\"ga\") # raises an exception\n```\n\n### StringUntil\nMatches any number of characters until a predicate is seen. You may set\nlower and upper bounds. Both are inclusive. The characters that match\nthe predicate are not consumed.\n```python\nsu = StringUntil(Char(\"=\")) # parses any number of characters until '='\nval = su(\"ab=\") # produces \"ab\" from the data.\nval = su(\"ab\") # raises an exception\n\nsu = StringUntil(Char(\"=\"), lower=2) # parses at least two characters until '='\nval = su(\"ab=\") # produces \"ab\" from the data.\nval = su(\"a=\") # raises an exception\n\nsu = StringUntil(Char(\"=\"), upper=2) # parses at most two characters until '='\nval = su(\"ab=\") # produces \"ab\" from the data.\nval = su(\"a=\") # produces \"a\"\nval = su(\"abc=\") # raises an exception\n```\n\n### Regex\nMatch characters against a regular expression.\n```python\nidentifier = Regex(\"[a-zA-Z]([a-zA-Z0-9])*\")\nidentifier(\"abcd1\") # returns \"abcd1\"\nidentifier(\"1bcd1\") # raises an exception\n```\n\n### Literal\nMatch a literal string. The `value` keyword lets you return a python value\ninstead of the matched input. The `ignore_case` keyword makes the match case\ninsensitive.\n```python\nlit = Literal(\"true\")\nval = lit(\"true\") # returns \"true\"\nval = lit(\"True\") # raises an exception\nval = lit(\"one\") # raises an exception\n\nlit = Literal(\"true\", ignore_case=True)\nval = lit(\"true\") # returns \"true\"\nval = lit(\"TRUE\") # returns \"TRUE\"\nval = lit(\"one\") # raises an exception\n\nt = Literal(\"true\", value=True)\nf = Literal(\"false\", value=False)\nval = t(\"true\") # returns the boolean True\nval = t(\"True\") # raises an exception\n\nval = f(\"false\") # returns the boolean False\nval = f(\"False\") # raises and exception\n\nt = Literal(\"true\", value=True, ignore_case=True)\nf = Literal(\"false\", value=False, ignore_case=True)\nval = t(\"true\") # returns the boolean True\nval = t(\"True\") # returns the boolean True\n\nval = f(\"false\") # returns the boolean False\nval = f(\"False\") # returns the boolean False\n```\n\n### Number\nMatch a possibly negative integer or simple floating point number and return\nthe python `int` or `float` for it.\n```python\nval = Number(\"123\") # returns 123\nval = Number(\"-12\") # returns -12\nval = Number(\"12.4\") # returns 12.4\nval = Number(\"-12.4\") # returns -12.4\n```\n\nparsr also provides SingleQuotedString, DoubleQuotedString, QuotedString, EOL,\nEOF, WS, AnyChar, and several other primitives. See the bottom of\n[parsr/\\_\\_init\\_\\_.py](https://github.com/csams/parsr/blob/master/parsr/__init__.py)\n\n## Combinators\nThere are several ways of combining primitives and their combinations.\n\n### Sequence\nRequire expressions to be in order.\n\nSequences are optimized so only the first object maintains a list of itself and\nfollowing objects. Be aware that using a sequence in other sequences will cause\nit to accumulate the elements of the new sequence onto it, which could affect it\nif it's used in multiple definitions. To ensure a sequence isn't \"sticky\" after\nits definition, wrap it in a `Wrapper` object.\n```python\na = Char(\"a\") # parses a single \"a\"\nb = Char(\"b\") # parses a single \"b\"\nc = Char(\"c\") # parses a single \"c\"\n\nab = a + b # parses a single \"a\" followed by a single \"b\"\n # (a + b) creates a \"Sequence\" object. Using `ab` as an\n # element in a later sequence would modify its original\n # definition.\n\nabc = a + b + c # parses \"abc\"\n # (a + b) creates a \"Sequence\" object to which c is appended\n\nval = ab(\"ab\") # produces a list [\"a\", \"b\"]\nval = ab(\"a\") # raises an exception\nval = ab(\"b\") # raises an exception\nval = ab(\"ac\") # raises an exception\nval = ab(\"cb\") # raises an exception\n\nval = abc(\"abc\") # produces [\"a\", \"b\", \"c\"]\n```\n\n### Choice\nAccept one of several alternatives. Alternatives are checked from left to right,\nand checking stops with the first one to succeed.\n\nChoices are optimized so only the first object maintains a list of alternatives.\nBe aware that using a choice object as an element in other choices will\ncause it to accumulate the elemtents of the new choice onto it, which could\naffect it if it's used in multiple definitions. To ensure a Choice isn't\n\"sticky\" after its definition, wrap it in a `Wrapper` object.\n```python\nabc = a | b | c # alternation or choice.\nval = abc(\"a\") # parses a single \"a\"\nval = abc(\"b\") # parses a single \"b\"\nval = abc(\"c\") # parses a single \"c\"\nval = abc(\"d\") # raises an exception\n```\n\n### Many\nMatch zero or more occurences of an expression. Matching is greedy.\n\nSince `Many` can match zero occurences, it always succeeds. Keep this in mind\nwhen using it in a list of alternatives or with `FollowedBy` or `NotFollowedBy`.\n```python\nx = Char(\"x\")\nxs = Many(x) # parses many (or no) x's in a row\nval = xs(\"\") # returns []\nval = xs(\"a\") # returns []\nval = xs(\"x\") # returns [\"x\"]\nval = xs(\"xxxxx\") # returns [\"x\", \"x\", \"x\", \"x\", \"x\"]\nval = xs(\"xxxxb\") # returns [\"x\", \"x\", \"x\", \"x\"]\n\nab = Many(a + b) # parses \"abab...\"\nval = ab(\"\") # produces []\nval = ab(\"ab\") # produces [[\"a\", b\"]]\nval = ab(\"ba\") # produces []\nval = ab(\"ababab\")# produces [[\"a\", b\"], [\"a\", \"b\"], [\"a\", \"b\"]]\n\nab = Many(a | b) # parses any combination of \"a\" and \"b\" like \"aababbaba...\"\nval = ab(\"aababb\")# produces [\"a\", \"a\", \"b\", \"a\", \"b\", \"b\"]\n\nxs = Many(x, lower=1) # parses many (or no) x's in a row\nval = xs(\"\") # raises an exception\nval = xs(\"a\") # raises an exception\nval = xs(\"x\") # returns [\"x\"]\nval = xs(\"xxxxx\") # returns [\"x\", \"x\", \"x\", \"x\", \"x\"]\nval = xs(\"xxxxb\") # returns [\"x\", \"x\", \"x\", \"x\"]\n\nab = Many(a + b, lower=1) # parses \"abab...\"\nval = ab(\"\") # raises an exception\nval = ab(\"ab\") # produces [[\"a\", \"b\"]]\nval = ab(\"ba\") # raises an exception\nval = ab(\"ababab\")# produces [[\"a\", \"b\"], [\"a\", \"b\"], [\"a\", \"b\"]]\n\nab = Many(a | b, lower=1) # parses any combination of \"a\" and \"b\" like \"aababbaba...\"\nval = ab(\"aababb\")# produces [\"a\", \"a\", \"b\", \"a\", \"b\", \"b\"]\n\nab = Many(a | b, upper=2) # parses any combination of \"a\" and \"b\" like \"aababbaba...\"\nval = ab(\"ab\") # produces [\"a\", \"b\"]\nval = ab(\"aab\") # raises an exception\n```\n\n### Until\nMatch zero or more occurences of an expression until a predicate matches.\nMatching is greedy.\n\nSince `Until` can match zero occurences, it always succeeds. Keep this in mind\nwhen using it in a list of alternatives or with `FollowedBy` or `NotFollowedBy`.\n```python\ncs = AnyChar.until(Char(\"y\")) # parses many (or no) characters until a \"y\" is\n # encountered.\n\nval = cs(\"\") # returns []\nval = cs(\"a\") # returns [\"a\"]\nval = cs(\"x\") # returns [\"x\"]\nval = cs(\"ccccc\") # returns [\"c\", \"c\", \"c\", \"c\", \"c\"]\nval = cs(\"abcdycc\") # returns [\"a\", \"b\", \"c\", \"d\"]\n```\n\n### Followed by\nRequire an expression to be followed by another, but don't consume the input\nthat matches the latter expression.\n```python\nab = Char(\"a\") & Char(\"b\") # matches an \"a\" followed by a \"b\", but the \"b\"\n # isn't consumed from the input.\nval = ab(\"ab\") # returns \"a\" and leaves \"b\" to be consumed.\nval = ab(\"ac\") # raises an exception and doesn't consume \"a\".\n```\n\n### Not followed by\nRequire an expression to *not* be followed by another.\n```python\nanb = Char(\"a\") / Char(\"b\") # matches an \"a\" not followed by a \"b\".\nval = anb(\"ac\") # returns \"a\" and leaves \"c\" to be consumed\nval = anb(\"ab\") # raises an exception and doesn't consume \"a\".\n```\n\n### Keep Left / Keep Right\n`KeepLeft` (`<<`) and `KeepRight` (`>>`) match adjacent expressions but ignore\none of their results.\n```python\na = Char(\"a\")\nq = Char('\"')\n\nqa = a << q # like a + q except only the result of a is returned\nval = qa('a\"') # returns \"a\". Keeps the thing on the left of the << \n\nqa = q >> a # like q + a except only the result of a is returned\nval = qa('\"a') # returns \"a\". Keeps the thing on the right of the >> \n\nqa = q >> a << q # like q + a + q except only the result of the a is returned\nval = qa('\"a\"') # returns \"a\".\n```\n\n### Opt\n`Opt` wraps a parser and returns a default value of `None` if it fails. That\nvalue can be changed with the `default` keyword. Input is consumed if the\nwrapped parser succeeds but not otherwise.\n```python\na = Char(\"a\")\no = Opt(a) # matches an \"a\" if its available. Still succeeds otherwise but\n # doesn't advance the read pointer.\nval = o(\"a\") # returns \"a\"\nval = o(\"b\") # returns None. Read pointer is not advanced.\n\no = Opt(a, default=\"x\") # matches an \"a\" if its available. Returns \"x\" otherwise.\nval = o(\"a\") # returns \"a\"\nval = o(\"b\") # returns \"x\". Read pointer is not advanced.\n```\n\n### map\nAll parsers have a `.map` function that allows you to pass a function to\nevaluate the input they've matched.\n```python\ndef to_number(val):\n # val is like [non_zero_digit, [other_digits]]\n first, rest = val\n s = first + \"\".join(rest)\n return int(s)\n\nm = NonZeroDigit + Many(Digit) # returns [nzd, [other digits]]\nn = m.map(to_number) # converts the match to an actual integer\nval = n(\"15\") # returns the int 15\n```\n\n### Lift\nAllows a multiple parameter function to work on parsers.\n```python\ndef comb(a, b, c):\n \"\"\" a, b, and c should be strings. Returns their concatenation.\"\"\"\n return \"\".join([a, b, c])\n\n# You'd normally invoke comb like comb(\"x\", \"y\", \"z\"), but you can \"lift\" it for\n# use with parsers like this:\n\nx = Char(\"x\")\ny = Char(\"y\")\nz = Char(\"z\")\np = Lift(comb) * x * y * z\n\n# The * operator separates parsers whose results will go into the arguments of\n# the lifted function. I've used Char above, but x, y, and z can be arbitrarily\n# complex.\n\nval = p(\"xyz\") # would return \"xyz\"\nval = p(\"xyx\") # raises an exception. nothing would be consumed\n```\n\n### Forward\n`Forward` allows recursive grammars where a nonterminal's definition includes\nitself directly or indirectly. You initially create a `Forward` nonterminal\nwith regular assignment.\n```python\nexpr = Forward()\n```\n\nYou later give it its real definition with the `<=` operator.\n```python\nexpr <= (term + Many(LowOps + term)).map(op)\n```\n\n### Arithmetic\nHere's an arithmetic parser that ties several concepts together. A progression\nof this parser from a simple imperative style to what you see below is in the\n[repo](https://github.com/csams/parsr/blob/master/parsr/lesson).\n\n```python\nfrom parsr import EOF, Forward, InSet, LeftParen, Many, Number, RightParen, WS\n\n\ndef op(args):\n ans, rest = args\n for op, arg in rest:\n if op == \"+\":\n ans += arg\n elif op == \"-\":\n ans -= arg\n elif op == \"*\":\n ans *= arg\n elif op == \"/\":\n ans /= arg\n return ans\n\n\n# high precedence operations\nHighOps = InSet(\"*/\")\n\n# low precedence operations\nLowOps = InSet(\"+-\")\n\n# Operator precedence is handled by having different declarations for each\n# prededence level. expr handles low level operations, term handles high level\n# operations, and factor handles simple numbers or subexpressions between\n# parentheses. Since the first element in expr is term and the first element in\n# term is factor, factors are evaluated first, then terms, and then exprs.\n\n# We have to declare expr before its definition since it's used recursively\n# through the definition of factor.\nexpr = Forward()\n\n# A factor is a simple number or a subexpression between parentheses.\nfactor = WS >> (Number | (LeftParen >> expr << RightParen)) << WS\n\n# A term handles strings of multiplication and division. As written, it would\n# convert \"1 + 2 - 3 + 4\" into [1, [['+', 2], ['-', 3], ['+', 4]]]. The first\n# element in the outer list is the initial factor. The second element of the\n# outer list is another list, which is the result of the Many. The Many's list\n# contains several two-element lists generated from each match of\n# (HighOps + factor). We pass the entire structure into the op function with\n# map.\nterm = (factor + Many(HighOps + factor)).map(op)\n\n# expr has the same form and behavior as term.\n# Notice that we assign to expr with \"<=\" instead of \"=\". This is how you assign\n# to nonterminals that have been declared previously as Forward.\nexpr <= (term + Many(LowOps + term)).map(op)\n\nval = expr(\"2*(3+4)/3+4\") # returns 8.666666666666668\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": "https://parsr.readthedocs.io/en/latest/parsr.html", "keywords": "", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "parsr", "package_url": "https://pypi.org/project/parsr/", "platform": "", "project_url": "https://pypi.org/project/parsr/", "project_urls": { "Homepage": "https://parsr.readthedocs.io/en/latest/parsr.html" }, "release_url": "https://pypi.org/project/parsr/0.4.2/", "requires_dist": [ "six (==1.15.0)", "twine (==3.2.0) ; extra == 'develop'", "sphinx-rtd-theme (==0.5.0) ; extra == 'develop'", "wheel (==0.35.1) ; extra == 'develop'", "pytest-cov (==2.10.1) ; extra == 'develop'", "coverage (==5.2.1) ; extra == 'develop'", "sphinx (==3.2.1) ; extra == 'develop'", "setuptools (==50.3.0) ; extra == 'develop'", "pytest (==6.0.1) ; extra == 'develop'", "ipython (==7.17.0) ; extra == 'develop'", "sphinx (==3.2.1) ; extra == 'docs'", "sphinx-rtd-theme (==0.5.0) ; extra == 'docs'", "six (==1.15.0) ; extra == 'docs'", "coverage (==5.2.1) ; extra == 'testing'", "pytest-cov (==2.10.1) ; extra == 'testing'", "pytest (==6.0.1) ; extra == 'testing'", "six (==1.15.0) ; extra == 'testing'" ], "requires_python": "", "summary": "Parsr is a simple parser combinator library in pure python.", "version": "0.4.2", "yanked": false, "yanked_reason": null }, "last_serial": 9157693, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "99eba22c41c75284e8b2351038fe8c78", "sha256": "2536627aa214acf1d703247fcb3ac2a9fafeb090c95a530ff1ddb7baa523ea6a" }, "downloads": -1, "filename": "parsr-0.0.1-py3.6.egg", "has_sig": false, "md5_digest": "99eba22c41c75284e8b2351038fe8c78", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 42828, "upload_time": "2019-01-13T23:34:13", "upload_time_iso_8601": "2019-01-13T23:34:13.414233Z", "url": "https://files.pythonhosted.org/packages/e3/5c/8e9d47a0f8ce08b849bcbf039ab15ebcfd773e6686cbd3f219e4daac60ab/parsr-0.0.1-py3.6.egg", "yanked": false, "yanked_reason": null } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "a8330e8be69f48e1280980586173fb68", "sha256": "b4b53008fe12c5d32df189160b1544479dd563b966252a95515ab3a370cc081c" }, "downloads": -1, "filename": "parsr-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a8330e8be69f48e1280980586173fb68", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24994, "upload_time": "2019-01-13T23:38:21", "upload_time_iso_8601": "2019-01-13T23:38:21.528500Z", "url": "https://files.pythonhosted.org/packages/bf/00/2d7836a4cef474219606c1c5a999a39e13cd28720247798748e888a51a3b/parsr-0.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a6ad16f192ec8ff3fffa8ff7bf1eb11a", "sha256": "b2bca9dc89dc1f7c6ed9df7ad8d5279e591a8f8aba3c98bab2fecd67da615085" }, "downloads": -1, "filename": "parsr-0.0.2.tar.gz", "has_sig": false, "md5_digest": "a6ad16f192ec8ff3fffa8ff7bf1eb11a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15841, "upload_time": "2019-01-13T23:38:23", "upload_time_iso_8601": "2019-01-13T23:38:23.088857Z", "url": "https://files.pythonhosted.org/packages/b1/af/6457d7eb050bb9ffe4a11175795b9e09b246efe191cb6d7ca6e31d7a5c6f/parsr-0.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "2cf914bbecdd369f70e7cb23b7469e2d", "sha256": "1aafbbd58059c5bd62ef1db054b7b87a98aab2f398532429cf0395759858ea1e" }, "downloads": -1, "filename": "parsr-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "2cf914bbecdd369f70e7cb23b7469e2d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24995, "upload_time": "2019-01-13T23:40:06", "upload_time_iso_8601": "2019-01-13T23:40:06.197718Z", "url": "https://files.pythonhosted.org/packages/c8/ca/f2085cd79dd61da612e005e3b3e94fc6eec97bebde933f04479ab9e385ae/parsr-0.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "31f1d09bd2a8d23660536e907d7895fc", "sha256": "0f7d63154b6422d763ef595f1e6cb5871f1bb5a99e05186435c93c51621dbf17" }, "downloads": -1, "filename": "parsr-0.0.3.tar.gz", "has_sig": false, "md5_digest": "31f1d09bd2a8d23660536e907d7895fc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15859, "upload_time": "2019-01-13T23:40:07", "upload_time_iso_8601": "2019-01-13T23:40:07.454794Z", "url": "https://files.pythonhosted.org/packages/3e/94/5982f10ee8eb155377479efff40bcf942862d830fe69f5ab709226000404/parsr-0.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "334a4b6562bb29ce110a257b74d3bfcf", "sha256": "d4c759f4d94ceecd9922d8465470e966410d55b1e74d68056237aa1b443f5bbb" }, "downloads": -1, "filename": "parsr-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "334a4b6562bb29ce110a257b74d3bfcf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25021, "upload_time": "2019-01-13T23:41:33", "upload_time_iso_8601": "2019-01-13T23:41:33.573209Z", "url": "https://files.pythonhosted.org/packages/2d/d4/ed8173eda0621e9edcbb2ad7e2b99b5be45b5045901a8eb807ee5322a3e0/parsr-0.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "8c03f1b491db0439533cbe59bb057059", "sha256": "ff81462ea392112309f1291ddd60ddbb9e05eeffbe74d3544ae7bb33bdbf5792" }, "downloads": -1, "filename": "parsr-0.0.4.tar.gz", "has_sig": false, "md5_digest": "8c03f1b491db0439533cbe59bb057059", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16938, "upload_time": "2019-01-13T23:41:35", "upload_time_iso_8601": "2019-01-13T23:41:35.189955Z", "url": "https://files.pythonhosted.org/packages/1f/dc/df7c969afb6e3a63bd469513754b331215ce0b0f9cf934459bfb51b3db84/parsr-0.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "9c9085b724ab8d9f9c5f8b184b5359a6", "sha256": "2a73145df468e122aa6d5cca7be296c425c8e91ae2a0d39d4ee3a3d2f175ae4b" }, "downloads": -1, "filename": "parsr-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "9c9085b724ab8d9f9c5f8b184b5359a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26077, "upload_time": "2019-01-14T18:07:14", "upload_time_iso_8601": "2019-01-14T18:07:14.143413Z", "url": "https://files.pythonhosted.org/packages/17/49/d8504e43799a3ab544dc5c233cded97afc2264f3057c55ceb9356509644b/parsr-0.0.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "786eeffb9968b53ec1c256a1a9791e62", "sha256": "af3c3efb695b5fd6526feae65ba65175faae4074c85b4e0bf42109d54b4021ee" }, "downloads": -1, "filename": "parsr-0.0.5.tar.gz", "has_sig": false, "md5_digest": "786eeffb9968b53ec1c256a1a9791e62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17648, "upload_time": "2019-01-14T18:07:15", "upload_time_iso_8601": "2019-01-14T18:07:15.645526Z", "url": "https://files.pythonhosted.org/packages/04/a8/bf4a1be911b322f1999b89578cca3c6a67d1945563a639fa10a930123267/parsr-0.0.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "329e14609f2fb3e370386f27e88c83f7", "sha256": "ed45c4136c44ae001411c2b879cbc916e8f1f6deaf5844d64e2d1be67e5cab30" }, "downloads": -1, "filename": "parsr-0.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "329e14609f2fb3e370386f27e88c83f7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26078, "upload_time": "2019-01-14T18:13:16", "upload_time_iso_8601": "2019-01-14T18:13:16.340072Z", "url": "https://files.pythonhosted.org/packages/a4/c3/031c534adf415af49975057469c09d337f8a42d39874a3503f945e366916/parsr-0.0.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "3afb0ef967043e3e8a88fd2f7b435c35", "sha256": "0804645839308fdfef07b5c241e8085927008b7f4c07180111d92aecd0be95be" }, "downloads": -1, "filename": "parsr-0.0.6.tar.gz", "has_sig": false, "md5_digest": "3afb0ef967043e3e8a88fd2f7b435c35", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17643, "upload_time": "2019-01-14T18:13:18", "upload_time_iso_8601": "2019-01-14T18:13:18.435083Z", "url": "https://files.pythonhosted.org/packages/99/31/595e25173a15fe1bff4d14fcdc4f71d4e0f707e217e1e9b17f399958ca15/parsr-0.0.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "6c45012b5fd7407a5c48234c3505ccbe", "sha256": "cbe164a537c69de074e719b21026af448300090acb84f09436da2da73375898e" }, "downloads": -1, "filename": "parsr-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "6c45012b5fd7407a5c48234c3505ccbe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 28504, "upload_time": "2019-01-14T20:52:42", "upload_time_iso_8601": "2019-01-14T20:52:42.800836Z", "url": "https://files.pythonhosted.org/packages/54/3d/ef4570b4ce8d823d72f31446c08bcd09d450b4d46b8881e444122eb457f3/parsr-0.0.7-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7f24c9f9c30456965abc1b218d98ea5e", "sha256": "53a715cc427c92a63191c0228efd9d5c7182cf16807e6d244ce861ae8c666e02" }, "downloads": -1, "filename": "parsr-0.0.7.tar.gz", "has_sig": false, "md5_digest": "7f24c9f9c30456965abc1b218d98ea5e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19466, "upload_time": "2019-01-14T20:52:44", "upload_time_iso_8601": "2019-01-14T20:52:44.160351Z", "url": "https://files.pythonhosted.org/packages/7b/d8/169360ec37abb97a3f735dc75cc98f6518e64dc6d1302bba1790190a2244/parsr-0.0.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "99b4da3b8b3b8fc00d665c3dd48a6070", "sha256": "62abb4464a91390f239c4dff4d6bdf702f22dab51da143d7811d7bd0160260c8" }, "downloads": -1, "filename": "parsr-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "99b4da3b8b3b8fc00d665c3dd48a6070", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 30239, "upload_time": "2019-01-15T15:58:48", "upload_time_iso_8601": "2019-01-15T15:58:48.815277Z", "url": "https://files.pythonhosted.org/packages/33/8f/f829008d6b56f538c36bc459d57c8a7e91678874e3c3ba632a4818ab3cf3/parsr-0.0.8-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b75ea7893f85569e2829be266e84aa5a", "sha256": "c10250260fb6f0069efd5b93488a2f546b6ea103b55302991f32091fae0084c3" }, "downloads": -1, "filename": "parsr-0.0.8.tar.gz", "has_sig": false, "md5_digest": "b75ea7893f85569e2829be266e84aa5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20526, "upload_time": "2019-01-15T15:58:50", "upload_time_iso_8601": "2019-01-15T15:58:50.284984Z", "url": "https://files.pythonhosted.org/packages/3e/c9/12ee5b7f93e8d6ff84b4cf15f6ca34624cfd6c308c8214abca4449f9e1d0/parsr-0.0.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "e9b0d2556c10098a8c79a60f5678c10b", "sha256": "51af9b0c0252132c56b99e1bb51a59cdd680cdd68ccf8dcb63dd1a0052068c8c" }, "downloads": -1, "filename": "parsr-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "e9b0d2556c10098a8c79a60f5678c10b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 30214, "upload_time": "2019-01-15T16:07:08", "upload_time_iso_8601": "2019-01-15T16:07:08.690115Z", "url": "https://files.pythonhosted.org/packages/05/7f/f1644a54cc9679b6395c44d895dbe51cd41e20056daa41f6024d7875859f/parsr-0.0.9-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ca4e20f57ad32414121de5c51701046d", "sha256": "1bdc120a7efe1b983fe57ebdab7d04f09ec9654ba516f29ea659cf141c9d032e" }, "downloads": -1, "filename": "parsr-0.0.9.tar.gz", "has_sig": false, "md5_digest": "ca4e20f57ad32414121de5c51701046d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20496, "upload_time": "2019-01-15T16:07:10", "upload_time_iso_8601": "2019-01-15T16:07:10.021270Z", "url": "https://files.pythonhosted.org/packages/50/d2/ea19d6d6779da0efa47a035eba6a0237606fb56caeb5c8a49c92e0f87a72/parsr-0.0.9.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "0a8d7cd3ebec48f6e7000adc1c1c8beb", "sha256": "7a7dbc652eb6fa0aa68a9607564e2ca89a64dae76e945cddd5b583470d250c48" }, "downloads": -1, "filename": "parsr-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0a8d7cd3ebec48f6e7000adc1c1c8beb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 30142, "upload_time": "2019-01-15T16:35:59", "upload_time_iso_8601": "2019-01-15T16:35:59.759681Z", "url": "https://files.pythonhosted.org/packages/c0/bd/bc3e00d830bbf3435138137000cb05d53526dad646dac49171e844cd07da/parsr-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ee741a705c74dd1c51a3a12a570190e4", "sha256": "d944d3756adf541a9938ab72fb449044a61c10769542177fe9ab17a607aa5e1a" }, "downloads": -1, "filename": "parsr-0.1.0.tar.gz", "has_sig": false, "md5_digest": "ee741a705c74dd1c51a3a12a570190e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20494, "upload_time": "2019-01-15T16:36:01", "upload_time_iso_8601": "2019-01-15T16:36:01.750783Z", "url": "https://files.pythonhosted.org/packages/0d/4c/646ae310be7ea3703509404336d6076c86551665fcee0d736988230273f5/parsr-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "8e8f2d29c42878426bfb2e0539aae24d", "sha256": "cc13f9117dd15bbc8a2221db614efada52ba830149d2b7a18fa623eddf281983" }, "downloads": -1, "filename": "parsr-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8e8f2d29c42878426bfb2e0539aae24d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 30281, "upload_time": "2019-01-15T17:02:38", "upload_time_iso_8601": "2019-01-15T17:02:38.221787Z", "url": "https://files.pythonhosted.org/packages/42/9e/76111a078d10fa5d92e4b2bcc4613f052da9ce9f2f2495b182f714ccbf7d/parsr-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "130cd46898a42c9d37b3ef00db86d5d3", "sha256": "4b119edf9ebe66f45ed272a9c25d247d07256d7d66162f98c9690ba4ea2c0679" }, "downloads": -1, "filename": "parsr-0.1.1.tar.gz", "has_sig": false, "md5_digest": "130cd46898a42c9d37b3ef00db86d5d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20670, "upload_time": "2019-01-15T17:02:39", "upload_time_iso_8601": "2019-01-15T17:02:39.686180Z", "url": "https://files.pythonhosted.org/packages/27/2e/dfeaec59bda5201a5ad57fc4a46c22a75bb3ce3f883fa80db5562326cc3b/parsr-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "561f6fe3ebe43093b44150aaf2d7e70a", "sha256": "fcdbd1300f368d7412d80f73448ef7a87a2109fbb88829fb32571cc56cca996d" }, "downloads": -1, "filename": "parsr-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "561f6fe3ebe43093b44150aaf2d7e70a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35455, "upload_time": "2019-01-16T22:49:42", "upload_time_iso_8601": "2019-01-16T22:49:42.810342Z", "url": "https://files.pythonhosted.org/packages/a1/50/ff5ffeada31a8e922d496ac0910a9004013de6e3786a95797e76a744b425/parsr-0.1.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e27531b1c37851961e199a8f9c1111e8", "sha256": "2c507986f40fe1d2d23ae0483f277dc6a93180edabb1aea9ae46897481a7ecb8" }, "downloads": -1, "filename": "parsr-0.1.2.tar.gz", "has_sig": false, "md5_digest": "e27531b1c37851961e199a8f9c1111e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22633, "upload_time": "2019-01-16T22:49:45", "upload_time_iso_8601": "2019-01-16T22:49:45.190524Z", "url": "https://files.pythonhosted.org/packages/6c/83/15576b029d743a5fb3e1e7488f648aace11ad35ae1b45134cb3710564345/parsr-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "fdca10662b345d5b70754de14751ca16", "sha256": "948efaac6336259376df801b8a9db5fa0691f5ab2eb9622957cb4b640fd38bac" }, "downloads": -1, "filename": "parsr-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "fdca10662b345d5b70754de14751ca16", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 58500, "upload_time": "2019-01-21T16:50:54", "upload_time_iso_8601": "2019-01-21T16:50:54.434436Z", "url": "https://files.pythonhosted.org/packages/17/32/b3a7c531c6e23c7da9703ea5f72e66695ee240ba30e52a361e28795e5943/parsr-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "80fb5838d8c41c09989204a33f0f00bc", "sha256": "9aa94dc8a0247d7f121400b4e84c110208741e6d5190d9eb4b1304af8bd58eea" }, "downloads": -1, "filename": "parsr-0.2.0.tar.gz", "has_sig": false, "md5_digest": "80fb5838d8c41c09989204a33f0f00bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28266, "upload_time": "2019-01-21T16:50:56", "upload_time_iso_8601": "2019-01-21T16:50:56.480843Z", "url": "https://files.pythonhosted.org/packages/5e/57/dd063c2a09b9ad8106c8b6d84ac611b6886f6e772290ba177fbcee67a73b/parsr-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "d0fbbe462d8de9e9b8aace5f788b6fe7", "sha256": "e0748bcf3599e51a06bd443512d8ad3ddcd52b5c164c2cd11b12be698614b319" }, "downloads": -1, "filename": "parsr-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d0fbbe462d8de9e9b8aace5f788b6fe7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 58581, "upload_time": "2019-01-23T12:55:40", "upload_time_iso_8601": "2019-01-23T12:55:40.892110Z", "url": "https://files.pythonhosted.org/packages/3e/b2/e5e55147b83ae4e1414ced1b11ab654c4c96d8c5e7c60509f448066913fc/parsr-0.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "3d394389f1082c50895474e5977fccb1", "sha256": "57c2f4bc9a762e57afa8fe26503979342002df0b929e9a3a889b4a2191da7fe6" }, "downloads": -1, "filename": "parsr-0.2.1.tar.gz", "has_sig": false, "md5_digest": "3d394389f1082c50895474e5977fccb1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28401, "upload_time": "2019-01-23T12:55:42", "upload_time_iso_8601": "2019-01-23T12:55:42.336664Z", "url": "https://files.pythonhosted.org/packages/e0/3b/4c0b94281dadd84e41810e9b25b5507632526da1bde3000a575a677a302f/parsr-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "6093bced7f71fe6b96a817e6c828ab17", "sha256": "b7a65798d9be6911ddd671cbb88fa8481ad6866762b4ea7ddc28aaa67229d589" }, "downloads": -1, "filename": "parsr-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "6093bced7f71fe6b96a817e6c828ab17", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 58561, "upload_time": "2019-01-23T13:00:34", "upload_time_iso_8601": "2019-01-23T13:00:34.693379Z", "url": "https://files.pythonhosted.org/packages/9f/34/a4dfe673f35073c30ce9d2f5c7b76568ce7d0b6e559ad163f65a5825179a/parsr-0.2.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "18c1c06fe0ffa93e075bc6cb66980a14", "sha256": "a411403ad285d1521835a6dd8ef9efc664e5d26ae388bda712e257a81683466a" }, "downloads": -1, "filename": "parsr-0.2.2.tar.gz", "has_sig": false, "md5_digest": "18c1c06fe0ffa93e075bc6cb66980a14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28353, "upload_time": "2019-01-23T13:00:36", "upload_time_iso_8601": "2019-01-23T13:00:36.432814Z", "url": "https://files.pythonhosted.org/packages/b5/71/098f3fe66225efc239be857ab173c1dd00e62fdf1ffdfc83ed4ea9a2688a/parsr-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "cf3c579a594ed78354e850797343b0a4", "sha256": "7f9a839e367d3314c1054e727ab918e954c760a35d48ace73c23380c40bf47d7" }, "downloads": -1, "filename": "parsr-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "cf3c579a594ed78354e850797343b0a4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 59091, "upload_time": "2019-01-23T13:25:09", "upload_time_iso_8601": "2019-01-23T13:25:09.343102Z", "url": "https://files.pythonhosted.org/packages/d3/7e/576ae74bce36e794dd6dc116dd4ee1dca00e50ee6687442b621a29bcf111/parsr-0.2.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d60d83200a23271a75b99c7501307d41", "sha256": "09e71b18aebf149cec2938f59e42a3e1f7d82b0ad9f3e19e5997decd02d0e5a4" }, "downloads": -1, "filename": "parsr-0.2.3.tar.gz", "has_sig": false, "md5_digest": "d60d83200a23271a75b99c7501307d41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28720, "upload_time": "2019-01-23T13:25:10", "upload_time_iso_8601": "2019-01-23T13:25:10.746558Z", "url": "https://files.pythonhosted.org/packages/2d/96/42d962b6605802eb729da416caf30d8011a1ed9bf2341920bc26ec62f859/parsr-0.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "a12f8d88b9c6106f806ec4ab198168b4", "sha256": "d0ee17630ecb2fc88ebd9d33207677d3b3f146f01db5f80ef0261fb6c54a022e" }, "downloads": -1, "filename": "parsr-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "a12f8d88b9c6106f806ec4ab198168b4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 60566, "upload_time": "2019-01-29T19:34:04", "upload_time_iso_8601": "2019-01-29T19:34:04.716043Z", "url": "https://files.pythonhosted.org/packages/a6/2b/4d6ac39c4e960e50131fc3c790af1ca216d2b7ba50891f62c10fa9b6611c/parsr-0.2.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "3a4a33f3d62519027854dc9c9ba74de4", "sha256": "0e9ff04d7a84ff3da4fd67c1eb2ee1712681090a6155bea4c9f8360776550088" }, "downloads": -1, "filename": "parsr-0.2.4.tar.gz", "has_sig": false, "md5_digest": "3a4a33f3d62519027854dc9c9ba74de4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29398, "upload_time": "2019-01-29T19:34:06", "upload_time_iso_8601": "2019-01-29T19:34:06.104358Z", "url": "https://files.pythonhosted.org/packages/bc/5e/0741f0233d97979df025f391d6120eb16984a55a066c99cc50cb7d141c94/parsr-0.2.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "1183ba4d5c89a8861c49aa1623d616a4", "sha256": "ed4ab5604b97240f6e6aac7f42cb442356da956af70a2abf491b03d115816e3e" }, "downloads": -1, "filename": "parsr-0.2.5-py3-none-any.whl", "has_sig": false, "md5_digest": "1183ba4d5c89a8861c49aa1623d616a4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 60591, "upload_time": "2019-02-18T14:57:52", "upload_time_iso_8601": "2019-02-18T14:57:52.154570Z", "url": "https://files.pythonhosted.org/packages/92/63/5e3981647d1b45be5ea871b2471724f50aa7866c5bff81723136e9fd49ef/parsr-0.2.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a2b0eccd7095ea6e1495f7b8f1635cf1", "sha256": "c0e7edf6623c33f2fbacec0c4d9a548b62151a13dbe77a38f55fa707ffe0c1e3" }, "downloads": -1, "filename": "parsr-0.2.5.tar.gz", "has_sig": false, "md5_digest": "a2b0eccd7095ea6e1495f7b8f1635cf1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29428, "upload_time": "2019-02-18T14:57:54", "upload_time_iso_8601": "2019-02-18T14:57:54.368091Z", "url": "https://files.pythonhosted.org/packages/80/7b/9ef7c0dda4c1bd2e684797378da45da60b5a0a44f660aa5ee143e177d09d/parsr-0.2.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "c7170c08ae3b3462a0bcd064215cc3be", "sha256": "bdee66c2431c7d88d6d989e943bfdc7c4875237213d913aafa5b5e4f6a73af60" }, "downloads": -1, "filename": "parsr-0.2.6.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "c7170c08ae3b3462a0bcd064215cc3be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67170, "upload_time": "2019-05-05T20:51:24", "upload_time_iso_8601": "2019-05-05T20:51:24.113934Z", "url": "https://files.pythonhosted.org/packages/e3/03/c73198d56e382161b3754cb3aede22cea7cd5fa5ca85704af711cbffac3c/parsr-0.2.6.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "48503152f3cec75208540d35dea903dc", "sha256": "816372f06475bf8de22ee5c424754dbc478fcd2d7acd47554e4a713dd9d68b21" }, "downloads": -1, "filename": "parsr-0.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "48503152f3cec75208540d35dea903dc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 45714, "upload_time": "2019-05-05T20:51:22", "upload_time_iso_8601": "2019-05-05T20:51:22.556525Z", "url": "https://files.pythonhosted.org/packages/27/f1/3bafc256630addf37b1360979696bf5430a85c9346129d816aca3625a060/parsr-0.2.6-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "647002343e6eeafcd88ad286c8ae1f66", "sha256": "6008ba4feaed753f3dcdd88e058e767b1d383c0dab97f5b73ac093e53811ef0b" }, "downloads": -1, "filename": "parsr-0.2.7.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "647002343e6eeafcd88ad286c8ae1f66", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 70165, "upload_time": "2019-05-20T12:52:00", "upload_time_iso_8601": "2019-05-20T12:52:00.785770Z", "url": "https://files.pythonhosted.org/packages/40/c1/a529385921404da422999509c41444728e5e1ea0f48451caecb390363c73/parsr-0.2.7.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e2a1c0da084e245be9d3d21e523b5862", "sha256": "9c62bf8a2cf2dae91969f2124fd6f1d6bc33157effc349ac5763c290d722278b" }, "downloads": -1, "filename": "parsr-0.2.7-py3-none-any.whl", "has_sig": false, "md5_digest": "e2a1c0da084e245be9d3d21e523b5862", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 46690, "upload_time": "2019-05-20T12:51:58", "upload_time_iso_8601": "2019-05-20T12:51:58.337427Z", "url": "https://files.pythonhosted.org/packages/d4/81/4cfe326eb6668f2c3950a998f7efe040958a6636057fd6c191d35384ed0f/parsr-0.2.7-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "cea3dc1cff4582ccf9de61a2d7917b8e", "sha256": "4871e95ea18fcf1ad06484abc44a180136a6e950b90ce4f25565641881584a63" }, "downloads": -1, "filename": "parsr-0.2.8.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "cea3dc1cff4582ccf9de61a2d7917b8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85608, "upload_time": "2019-05-28T21:39:38", "upload_time_iso_8601": "2019-05-28T21:39:38.627933Z", "url": "https://files.pythonhosted.org/packages/b6/53/cf5fa5778d5910608085d98b8785e8c6ee2e5bea7656dfc07233692d16f8/parsr-0.2.8.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "97f4633b65a2efc2c5ec0d75a6060d36", "sha256": "c2223206b174ab8280efa0e6dedeead6d236da14a136d5a27ea5a78af13ff872" }, "downloads": -1, "filename": "parsr-0.2.8-py3-none-any.whl", "has_sig": false, "md5_digest": "97f4633b65a2efc2c5ec0d75a6060d36", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 53690, "upload_time": "2019-05-28T21:39:36", "upload_time_iso_8601": "2019-05-28T21:39:36.666426Z", "url": "https://files.pythonhosted.org/packages/5d/19/91fdb9de5045d00c2af32712337a8e523e2cd40b24c1ecfde2b429a33ea8/parsr-0.2.8-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.2.9": [ { "comment_text": "", "digests": { "md5": "162d7a59927769e34a3345402e9e58b0", "sha256": "8e7611c7b711063a40883e51bbb288f70eed7a904a44e727010b49cbcda9a6c4" }, "downloads": -1, "filename": "parsr-0.2.9.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "162d7a59927769e34a3345402e9e58b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 85621, "upload_time": "2019-05-28T21:45:23", "upload_time_iso_8601": "2019-05-28T21:45:23.521603Z", "url": "https://files.pythonhosted.org/packages/bf/26/3beff6c3beac639aa0a964e3263b9527f1f6fcfeef097657e01bf79d0611/parsr-0.2.9.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "b0d58a6244a9f3ef37d0a555f5a0f927", "sha256": "c30fe7c5386f7b976f30d7a2a1198a317d22738d8b98ae7767bb176937b257a9" }, "downloads": -1, "filename": "parsr-0.2.9-py3-none-any.whl", "has_sig": false, "md5_digest": "b0d58a6244a9f3ef37d0a555f5a0f927", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 53706, "upload_time": "2019-05-28T21:45:17", "upload_time_iso_8601": "2019-05-28T21:45:17.312462Z", "url": "https://files.pythonhosted.org/packages/85/d3/d81cad0658b3b8cf897916a75e90a9c21902fe230f1e66e643b4c2365d0a/parsr-0.2.9-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "603a3e7b91cd0d51e3493b85b0b8c9af", "sha256": "61599cd747b805d0987eb838b88301affe1e252dde7f9e333855d25aff2556e1" }, "downloads": -1, "filename": "parsr-0.3.0.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "603a3e7b91cd0d51e3493b85b0b8c9af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 91039, "upload_time": "2019-10-28T18:19:31", "upload_time_iso_8601": "2019-10-28T18:19:31.904577Z", "url": "https://files.pythonhosted.org/packages/07/a2/da288f6876622bd537de6d3daaad67048d373903b625cb7bff796494ea7a/parsr-0.3.0.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "cc5d1a738d4ff23384a19db92f5e2d2b", "sha256": "f52212be98910115cbe52b1f1167e1f42136d2e7bfe15167cafc84335aa751b6" }, "downloads": -1, "filename": "parsr-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "cc5d1a738d4ff23384a19db92f5e2d2b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 56413, "upload_time": "2019-10-28T18:19:28", "upload_time_iso_8601": "2019-10-28T18:19:28.830790Z", "url": "https://files.pythonhosted.org/packages/1f/da/5676d5fb9d6c1e1c60c43b09ccbf020828ca91ff2953fc27ff67472af948/parsr-0.3.0-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "5c949ed7de1dd5ad99ecb900bd65d9b5", "sha256": "840280fd590f5274751b439737e1921bee22aafbb5f1ed570341c8f9173fc3f2" }, "downloads": -1, "filename": "parsr-0.3.1.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "5c949ed7de1dd5ad99ecb900bd65d9b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88125, "upload_time": "2020-08-14T15:44:44", "upload_time_iso_8601": "2020-08-14T15:44:44.282995Z", "url": "https://files.pythonhosted.org/packages/a8/65/cd27993519b6dfe781f42497e7ca445dbf30f55d572871fdf1b671808163/parsr-0.3.1.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "34b0b386315e1534627a0dd8231ec46f", "sha256": "cf487727c975783376fe10b9c5e520df0cf2633d014dc78f4a374d186e871f59" }, "downloads": -1, "filename": "parsr-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "34b0b386315e1534627a0dd8231ec46f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 56439, "upload_time": "2020-08-14T15:44:42", "upload_time_iso_8601": "2020-08-14T15:44:42.402174Z", "url": "https://files.pythonhosted.org/packages/d4/33/aaeab299b79468e9dd86d0a915044af110ffd4720e9e1a8564bfb64236ef/parsr-0.3.1-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "696abddbbef3ba2dae7584c5bcdc89fd", "sha256": "4c39cba301a236212e646187598726755f1f451184f740179c83e33b777ae05e" }, "downloads": -1, "filename": "parsr-0.3.2.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "696abddbbef3ba2dae7584c5bcdc89fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 89673, "upload_time": "2020-08-14T20:52:52", "upload_time_iso_8601": "2020-08-14T20:52:52.563400Z", "url": "https://files.pythonhosted.org/packages/00/32/e522a4bc14396a3f2823694392c76a1a6bcac4ba179569a94271b5d96140/parsr-0.3.2.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c300b6f91ae96272e14fe022d8a2cc5c", "sha256": "f66850cef212b4cf31f83e4e30971e2ace007ace8dab468131d79681d9b3fb05" }, "downloads": -1, "filename": "parsr-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c300b6f91ae96272e14fe022d8a2cc5c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 57287, "upload_time": "2020-08-14T20:52:50", "upload_time_iso_8601": "2020-08-14T20:52:50.739627Z", "url": "https://files.pythonhosted.org/packages/1d/d5/77fa14b85aef92d749ed592f528400e08e2b895c0b2dc1c3ba19170e5fbe/parsr-0.3.2-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "61b16dc543d7e538617591ffa99ba561", "sha256": "a6df39b4cec2b044cbd723af82d5bcc7f246c3eb9bfc686196ee1c9990956a45" }, "downloads": -1, "filename": "parsr-0.3.3.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "61b16dc543d7e538617591ffa99ba561", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 89990, "upload_time": "2020-08-14T22:32:50", "upload_time_iso_8601": "2020-08-14T22:32:50.664028Z", "url": "https://files.pythonhosted.org/packages/76/df/eda493319e7f0eedbdbc136480dfce3af010e6cac5d308431152f07a5b07/parsr-0.3.3.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f8b8b49cd4349771040fd07a00304701", "sha256": "0f527dc141d73800eb1ad22bda68513e58e65405b7a8a2c08d91e42b90e908b8" }, "downloads": -1, "filename": "parsr-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "f8b8b49cd4349771040fd07a00304701", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 57381, "upload_time": "2020-08-14T22:32:49", "upload_time_iso_8601": "2020-08-14T22:32:49.078606Z", "url": "https://files.pythonhosted.org/packages/cb/46/a565c4e43fcc5b1f8780719ebf580c064869dc716d408232fd3eecfba8aa/parsr-0.3.3-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "15c04be24e4a481de5107b46dd6030c2", "sha256": "ffcf261704ec6da7c282eb072d9bbf16ffd5328e006b2d4086dcb4a93d71dd28" }, "downloads": -1, "filename": "parsr-0.3.4.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "15c04be24e4a481de5107b46dd6030c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90003, "upload_time": "2020-08-15T21:31:54", "upload_time_iso_8601": "2020-08-15T21:31:54.003354Z", "url": "https://files.pythonhosted.org/packages/5e/fa/55dc66336a2faabeddbcd69d59e8b8782ac38f4db6eefd13bf14b7cdd8df/parsr-0.3.4.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a4ff8e4ce8cac3931911f8fd271032b3", "sha256": "9eb4aec505a30f56b57b51dc67db84afff9bb95df060bc96fdf7888150fafc88" }, "downloads": -1, "filename": "parsr-0.3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "a4ff8e4ce8cac3931911f8fd271032b3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 57384, "upload_time": "2020-08-15T21:31:51", "upload_time_iso_8601": "2020-08-15T21:31:51.935601Z", "url": "https://files.pythonhosted.org/packages/2e/71/b7a181f1c86979c8eb5e7fc639b8d33aa1e2f3fca0edd6ac0985208ebb7b/parsr-0.3.4-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "f16fca37699d1a54b1a9ba0f17706469", "sha256": "82cb6803aa59aab2b1eeabdf0424049e90c65312530ea68cecce0491bc82f61e" }, "downloads": -1, "filename": "parsr-0.3.5.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "f16fca37699d1a54b1a9ba0f17706469", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90072, "upload_time": "2020-09-05T20:12:11", "upload_time_iso_8601": "2020-09-05T20:12:11.622779Z", "url": "https://files.pythonhosted.org/packages/bc/74/47092f0fe348b98641de308296e46d4b18a82aa38031dab153cf03982bbf/parsr-0.3.5.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "759225261220058da037714b63dc84c5", "sha256": "d7a27c3a573939061f8926ff50bee69e0b60ad85b78796b734e32d981170731d" }, "downloads": -1, "filename": "parsr-0.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "759225261220058da037714b63dc84c5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 57412, "upload_time": "2020-09-05T20:12:09", "upload_time_iso_8601": "2020-09-05T20:12:09.843445Z", "url": "https://files.pythonhosted.org/packages/5a/4e/6f1e51d3e911c812b4667a2bc819ad88df87720f9214adf697aa582d1849/parsr-0.3.5-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "a4bfa0da40f341154d3db8030a38da92", "sha256": "e91c126f705511591255762f218ef11caaaad34f98af15801cf3600aa765ac4c" }, "downloads": -1, "filename": "parsr-0.4.0.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "a4bfa0da40f341154d3db8030a38da92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 91131, "upload_time": "2020-09-07T17:59:44", "upload_time_iso_8601": "2020-09-07T17:59:44.478780Z", "url": "https://files.pythonhosted.org/packages/68/68/9f318b3ba1c19f0ad47f329c92ff28264ec459d84793d19038e6a2245bc2/parsr-0.4.0.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "96dbc5f3816c959e2f948478c57bcdf8", "sha256": "7120be880c6b1fa1a085e308d949f93ee1e91b7f2dfa46b7ed9a95ec0e9c12e9" }, "downloads": -1, "filename": "parsr-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "96dbc5f3816c959e2f948478c57bcdf8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 58197, "upload_time": "2020-09-07T17:59:42", "upload_time_iso_8601": "2020-09-07T17:59:42.786802Z", "url": "https://files.pythonhosted.org/packages/ff/8b/9e30a0988b743631f0c09275bf64babb4b0b3e3b336d8f77f6a5b0ad6985/parsr-0.4.0-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "3c889e1486267b434d654e436d93aa87", "sha256": "90f2b7b4d3e4c31baad747effe867459d893b2768c3da2c983baf13d063ecdf3" }, "downloads": -1, "filename": "parsr-0.4.1.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "3c889e1486267b434d654e436d93aa87", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90982, "upload_time": "2020-09-07T23:06:48", "upload_time_iso_8601": "2020-09-07T23:06:48.255149Z", "url": "https://files.pythonhosted.org/packages/f7/8d/0f6593d72a5458b78746f1c756820e931149ea0358c9933207a4dadfba3d/parsr-0.4.1.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d7bd0a289a8fb1cc7a8141090af6d366", "sha256": "29a588db66f2e6bb49d17b3b978b3f7c0e6fbaca7a27b0bbe1d0968df51277c0" }, "downloads": -1, "filename": "parsr-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d7bd0a289a8fb1cc7a8141090af6d366", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 58148, "upload_time": "2020-09-07T23:06:46", "upload_time_iso_8601": "2020-09-07T23:06:46.513136Z", "url": "https://files.pythonhosted.org/packages/26/b1/b02ca81e7cf1f589e24baa547ef0ce27ded61b398533551424c03fa7549e/parsr-0.4.1-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "955534c7043194bc469f7efa0a02d66b", "sha256": "5612e2976c4a324cbb1a4da7e709cec9b49f4d2aba380abf01938c01de864317" }, "downloads": -1, "filename": "parsr-0.4.2.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "955534c7043194bc469f7efa0a02d66b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 93712, "upload_time": "2021-01-17T18:10:59", "upload_time_iso_8601": "2021-01-17T18:10:59.117520Z", "url": "https://files.pythonhosted.org/packages/65/ca/52ac9583b40a5280bcdb2a237c9b842e744546d8e2106cac7f837d47702f/parsr-0.4.2.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c74cd451d498ab50d7ee90650f7dc7b8", "sha256": "67dde5cfc7d79f2326dd3435d933f3a77140c7ea4bf31e823e5b100aa855fc1b" }, "downloads": -1, "filename": "parsr-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c74cd451d498ab50d7ee90650f7dc7b8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 60487, "upload_time": "2021-01-17T18:10:57", "upload_time_iso_8601": "2021-01-17T18:10:57.371921Z", "url": "https://files.pythonhosted.org/packages/bd/44/87d4ee5991cd3c92a6f2cf276cf67989255e4cf38f79f31e297b880b9a84/parsr-0.4.2-py3-none-any.whl", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "955534c7043194bc469f7efa0a02d66b", "sha256": "5612e2976c4a324cbb1a4da7e709cec9b49f4d2aba380abf01938c01de864317" }, "downloads": -1, "filename": "parsr-0.4.2.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "955534c7043194bc469f7efa0a02d66b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 93712, "upload_time": "2021-01-17T18:10:59", "upload_time_iso_8601": "2021-01-17T18:10:59.117520Z", "url": "https://files.pythonhosted.org/packages/65/ca/52ac9583b40a5280bcdb2a237c9b842e744546d8e2106cac7f837d47702f/parsr-0.4.2.linux-x86_64.tar.gz", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c74cd451d498ab50d7ee90650f7dc7b8", "sha256": "67dde5cfc7d79f2326dd3435d933f3a77140c7ea4bf31e823e5b100aa855fc1b" }, "downloads": -1, "filename": "parsr-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c74cd451d498ab50d7ee90650f7dc7b8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 60487, "upload_time": "2021-01-17T18:10:57", "upload_time_iso_8601": "2021-01-17T18:10:57.371921Z", "url": "https://files.pythonhosted.org/packages/bd/44/87d4ee5991cd3c92a6f2cf276cf67989255e4cf38f79f31e297b880b9a84/parsr-0.4.2-py3-none-any.whl", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }