{ "info": { "author": "Christophe BAL", "author_email": "projetmbc@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: GNU General Public License (GPL)", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "About this package\n==================\n\n**orPyste**, which is an anagram of **pyStore**, has been built to make easy to work with textual datas easy stored in a text file.\n\n***If you want more informations and examples than thereafter, just take\na look in the docstrings.***\n\n\nI beg your pardon for my english...\n===================================\n\nEnglish is not my native language, so be nice if you notice misunderstandings, misspellings or grammatical errors in my documents and my codes.\n\n\nWhat's new in this version `1.3.2-beta` ?\n=========================================\n\nThis version only updates settings for \u00a8pypi.\n\n\nWhat's new in this version `1.3.1-beta` ?\n=========================================\n\nSections and comments can't no longer be indented (indeed for sections this feature was a bug).\n\n\nWhat's new in this version `1.3.0-beta` ?\n=========================================\n\nOne useful new feature : you can now aggregate different virtual \u00a8peuf files inside a single physical one using sections.\n\n\nWhat was new in the preceding version `1.2.0-beta` ?\n====================================================\n\nThere are some important changes in this version.\n\n1. The mode ``multikeyval``, for repeatable keys in the same block, has been totally implemented.\n\n1. You can now use a context manager with the classes ``Read``, ``ReadBlock`` and ``Clean``. By using ``with ... as ...:``, you let the package calls for you the methods ``build`` and ``remove_extras`` *(this last method had name ``remove`` before)*.\n\n1. The class ``ReadBlock`` no longer has the methods ``flatdict`` and ``recudict``. Instead, it has two properties ``flatdict`` and ``treedict`` that allow to work with ``dict`` like variables. For customized dictionaries, you can use the new method ``mydict``.\n\n1. The old method ``rtu_datas`` of the class ``Infos`` has been replaced by the property ``rtu`` which outputs are easier to \"understand\", and there is also an iterator ``yrtu`` to work with the \"same\" kind of datas with the classes ``Read`` and ``ReadBlock``.\n\n\nWhy yet another tiny language to store textual datas ?\n======================================================\n\nThe package `orpyste` was born from a need to quickly write simple and structured datas to configuration files and for unit tests. Before getting into the details, here is a small example of an `orpyste` file storing informations on players. Sorry for the lack of originality ...\n\n\n```\njoueur_1::\n date = 1985\n sexe = masculin\n score = 18974\n alias = Super Mario\n\njoueur_2::\n date = 1991\n sexe = f\u00e9minin\n score = 32007\n alias = Sonic\n```\n\nWriting this with XML could be done like this :\n\n```xml\n\n\n\n```\n\nUsing JSON, we could use the following variable.\n\n```json\n{\n \"joueur_1\": {\n \"date\": \"1985\",\n \"sexe\": \"masculin\",\n \"score\": \"18974\",\n \"alias\": \"Super Mario\",\n },\n \"joueur_2\": {\n \"date\": \"1991\",\n \"sexe\": \"f\u00e9minin\",\n \"score\": \"32007\",\n \"alias\": \"Sonic\",\n }\n}\n```\n\nAs you can see, for simple datas, `orpyste` gives a very simple and efficient way to store informations.\n\n\nHow to write files readable by `orpyste` ?\n==========================================\n\nThe specification of the files readable by `orpyste` is named `peuf`. So the question becomes : *\"What is a well formatted `peuf` file ?\"*.\nTo answer this, let's look at the following example.\n\n```\n/*\nLong comment: here, we use the first block as a container.\n\nNote the use of two consecutive double points so as to indicate a block.\n*/ \nbook::\n// Short comment: then the block `general` uses a key-value storing.\n general::\n author = M. Nobody\n title = Does this book have a title ?\n date = 2012, May the 1st\n\n// Short comment: the last block `resume` uses a verbatim content.\n resume::\n This book is an ode to the passing time...\n\n\n////\n```\n\n\nLet's explain the content of the preceding example.\n\n1. You can comment your `peuf` files using C-like comments but **a comment can only start at the very beginning of a line**.\n\n1. Datas are structured in blocks which can be of three different kinds.\n\n * A block is indicated using two consecutive double points and its content is indented.\n\n * A block can be a container like the block `book`. This is for gathering different blocks.\n\n * The block `general` stores key-value datas with the possibility to choose the separators. **Here we have used `=` but it is not an obligation.** You can also choose to allow or not multiple use of the same key.\n\n * The last kind of blocks is for a verbatim content. The last empty lines are removed except if you use the magic comment `////` as we have done. In our example the block `resume` has a content made of `This book is an ode to the passing time...` followed by two empty lines.\n\n\nReading the datas line by line\n==============================\n\nLet's consider the following file where `book` is a container, `general` is a classical key-value content using the separator `=` and `resume` has a verbatim content. \n\n```\nbook::\n general::\n author = M. Nobody\n title = Does this book have a title ?\n date = 2012, May the 1st\n\n resume::\n This book is an ode to the passing time...\n A challenging thinking.\n```\n\n\nLet's suppose that `user/example.peuf` is the path of our storing file. Using the following code shows how to read our datas.\n\n```python\nfrom pathlib import Path\nimport pprint\n\nfrom orpyste.data import Read\n\nwith Read(\n content = Path(\"user/example.peuf\"),\n mode = {\n \"container\" : \":default:\",\n \"keyval:: =\": \"general\",\n \"verbatim\" : \"resume\"\n }\n) as datas:\n for onedata in datas:\n if onedata.isblock():\n print('--- {0} ---'.format(onedata.querypath))\n elif onedata.isdata():\n pprint.pprint(onedata.rtu)\n```\n\nLaunching in a terminal, the script will produce the following output where you can note that a \"querypath\" like `book/general` indicates that the block `general` is inside the block `book`.\n\n```\n--- book/general ---\n(4, 'author', '=', 'M. Nobody')\n(5, 'title', '=', 'Does this book have a title ?')\n(6, 'date', '=', '2012, May the 1st')\n--- book/resume ---\n(9, 'This book is an ode to the passing time...')\n(10, 'A challenging thinking.')\n```\n\nYou can see that verbatim contents are given line by line, and that the separator between one key and its value is always indicated. This last behavior is due to the fact that you can use different separators if you want.\nThe number of lines in the original content are always given so as to let other applications the possibility to use them for messages.\n\n\nLet's see another example with the following data file.\n\n```\nlogic::\n A <==> B\n A ==> B\n A <== P\n```\n\nThis file is easy to read with the code above where `mode = \"multikeyval:: <==> <== ==>\"` is a shortcut for `mode = {\"multikeyval:: <==> <== ==>\": \":default:\"}`. This setting allows multiple uses of the same key.\n\n```python\nfrom pathlib import Path\nimport pprint\n\nfrom orpyste.data import Read\n\nwith Read(\n content = Path(\"user/example.peuf\"),\n mode = \"multikeyval:: <==> <== ==>\"\n) as datas:\n for onedata in datas:\n if onedata.isblock():\n print('--- {0} ---'.format(onedata.querypath))\n elif onedata.isdata():\n pprint.pprint(onedata.rtu)\n```\n\nThe output below shows the necessity here to always have the separators.\n\n```\n--- logic ---\n(3, 'A', '<==>', 'B')\n(4, 'A', '==>', 'B')\n(5, 'A', '<==', 'P')\n```\n\n\nReading the datas block by block\n================================\n\nWe go back to our second example with the following file whose path is `user/example.peuf`.\n\n```\nbook::\n general::\n author = M. Nobody\n title = What is the title ?\n date = 2012, May the 1st\n\n resume::\n This book is an ode to the passing time...\n A challenging thinking.\n```\n\n\nThe class `ReadBlock` is a subclass of `Read` so you can use any methods working with `Read`. But the goal of `ReadBlock` is to work with dictionaries instead of reading datas line by line *(for large files this last choice is a better one)*. Let's see first the property `flatdict`.\n\n```python\nfrom pathlib import Path\n\nfrom orpyste.data import ReadBlock\n\nwith ReadBlock(\n content = Path(\"user/example.peuf\"),\n mode = {\n \"container\" : \":default:\",\n \"keyval:: =\": \"general\",\n \"verbatim\" : \"resume\"\n }\n) as datas:\n print(datas.flatdict)\n```\n\n\nThe code launched in one terminal gives us the following output *(which has been hand formatted)*.\n\n```\nMKOrderedDict([\n (id=0,\n key='book/general',\n value=MKOrderedDict([\n (id=0,\n key='author',\n value={'nbline': 4, 'value': 'M. Nobody', 'sep': '='}),\n (id=0,\n key='title',\n value={'nbline': 5, 'value': 'What is the title ?', 'sep': '='}),\n (id=0,\n key='date',\n value={'nbline': 6, 'value': '2012, May the 1st', 'sep': '='})\n ])\n ),\n (id=0,\n key='book/resume',\n value=(\n {'nbline': 9, 'value': 'This book is an ode to the passing time...'},\n {'nbline': 10, 'value': 'A challenging thinking.'})\n )\n])\n```\n\n\nAs you can see, the keys are \"querypaths\" and the values are the datas. You can also use the property `treedict` which produces a dictionary with a structure similar to the one of the blocks in the content analyzed. The following code is merly the same as the previous one *(`[...]` indicates the first lines of the preceding code)*.\n\n```python\n[...]\n\nwith ReadBlock(...) as datas:\n print(datas.treedict)\n```\n\n\nHere are the dictionary produced *(the ouput has been hand formatted)*.\n\n```\nRecuOrderedDict([\n ('book',\n RecuOrderedDict([\n ('general',\n RecuOrderedDict([\n ('author',\n {'nbline': 4, 'sep': '=', 'value': 'M. Nobody'}),\n ('title',\n {'nbline': 5, 'sep': '=', 'value': 'What is the title ?'}),\n ('date',\n {'nbline': 6, 'sep': '=', 'value': '2012, May the 1st'})\n ])\n ),\n ('resume',\n (\n {'nbline': 9,\n 'value': 'This book is an ode to the passing time...'},\n {'nbline': 10,\n 'value': 'A challenging thinking.'}\n )\n )\n ])\n )\n])\n```\n\n\nIf you want to customize a little the dictionary build by ``ReadBlock``, you can use the method `mydict` like in the following example *(see the \"docstrings\" for more informations)*.\n\n```python\n[...]\n\nwith ReadBlock(...) as datas:\n print('--- Standard \"flat\" dict ---')\n print(datas.mydict(\"std nosep nonb\"))\n\n print('--- Standard \"tree\" dict ---')\n print(datas.mydict(\"tree std nosep nonb\"))\n```\n\n\nWe obtain here two standard dictionaries with neither separators, nor number lines.\n\n```\n--- Standard \"flat\" dict ---\n{\n 'book/general': {\n 'author': 'M. Nobody',\n 'date': '2012, May the 1st',\n 'title': 'Does this book have a title ?'\n },\n 'book/resume': (\n 'This book is an ode to the passing time...'\n 'A challenging thinking.'\n )\n}\n--- Standard \"tree\" dict ---\n{\n 'book': {\n 'general': {\n 'author': 'M. Nobody',\n 'date': '2012, May the 1st',\n 'title': 'Does this book have a title ?'\n },\n 'resume': (\n 'This book is an ode to the passing time...',\n 'A challenging thinking.'\n )\n }\n}\n```\n\n\nSearching for blocks\n====================\n\nHere we consider the following file whose path remains equal to `user/example.peuf`.\n\n```\nmain::\n test::\n a = 1 + 9\n b <> 2\n c = 3 and 4\n\n sub_main::\n sub_sub_main::\n verb::\n line 1\n line 2\n line 3\n```\n\n\nThe classes `Read` and `ReadBlock` allow to search for data blocks using queries on \"querypaths\". The special syntax to use tries to catch the best of the Python regex and the Unix-glob syntaxes. Take a look at the documentation of the function ``data.regexify`` for details. The following examples give some examples of queries.\n\n```python\nfrom pathlib import Path\n\nfrom orpyste.data import Read\n\nwith Read(\n content = Path(\"user/example.peuf\"),\n mode = {\n \"container\" : \":default:\",\n \"keyval:: = <>\": \"test\",\n \"verbatim\" : \"verb\"\n }\n) as datas:\n for query in [\n \"main/test\", # Only one path\n \"**\", # Anything\n \"main/*\", # Anything \"contained\" inside \"main\"\n ]:\n title = \"Query: {0}\".format(query)\n hrule = \"=\"*len(title)\n\n print(\"\", hrule, title, hrule, sep = \"\\n\")\n\n for oneinfo in datas[query]:\n if oneinfo.isblock():\n print(\n \"\",\n \"--- {0} [{1}] ---\".format(\n oneinfo.querypath,\n oneinfo.mode\n ),\n sep = \"\\n\"\n )\n\n else:\n for data_rtu in onedata.yrtu():\n print(data_rtu)\n```\n\n\nThis gives the following outputs as expected.\n\n```\n================\nQuery: main/test\n================\n\n--- main/test [keyval] ---\n(4, 'a', '=', '1 + 9')\n(5, 'b', '<>', '2')\n(6, 'c', '=', '3 and 4')\n\n=========\nQuery: **\n=========\n\n--- main/test [keyval] ---\n(4, 'a', '=', '1 + 9')\n(5, 'b', '<>', '2')\n(6, 'c', '=', '3 and 4')\n\n--- main/sub_main/sub_sub_main/verb [verbatim] ---\n(11, 'line 1')\n(12, ' line 2')\n(13, ' line 3')\n\n=============\nQuery: main/*\n=============\n\n--- main/test [keyval] ---\n(4, 'a', '=', '1 + 9')\n(5, 'b', '<>', '2')\n(6, 'c', '=', '3 and 4')\n```\n\n\nStoring your datas in a `json` variable\n=======================================\n\nThe class `ReadBlock` has a method `forjson` that allows to store your datas in a `json` file *(the storing has to be done by you)*. The following code will give us just after the structure used.\n\n```python\nfrom orpyste.data import ReadBlock\n\ncontent = '''\nmain::\n test::\n a = 1 + 9\n b <> 2\n c = 3 and 4\n\n sub_main::\n sub_sub_main::\n verb::\n line 1\n line 2\n line 3\n'''\n\nwith ReadBlock(\n content = content,\n mode = {\n \"container\" : \":default:\",\n \"keyval:: = <>\": \"test\",\n \"verbatim\" : \"verb\"\n }\n) as datas:\n jsonobj = datas.forjson\n print(jsonobj)\n```\n\n\nLaunched in a terminal, we obtain the following output which has been hand formatted. As you can see, we use the format `[key, value]` so as to store the keys and the values of the `python` dictionary given by the method `ReadBlock.flatdict` and `ReadBlock.recudict`. You can also note that for verbatim content we use a `null` key *(this is to ease other applications to extract informations from a \"symmetric\" `json` variable)*.\n\n```json\n[\n [\n [0, \"main/test\"],\n [\n [\n [0, \"a\"],\n {\"nbline\": 4, \"sep\": \"=\", \"value\": \"1 + 9\"}\n ],\n [\n [0, \"b\"],\n {\"nbline\": 5, \"sep\": \"<>\", \"value\": \"2\"}\n ],\n [\n [0, \"c\"],\n {\"nbline\": 6, \"sep\": \"=\", \"value\": \"3 and 4\"}\n ]\n ]\n ],\n [\n [0, \"main/sub_main/sub_sub_main/verb\"],\n [\n null,\n [\n {\"nbline\": 11, \"value\": \"line 1\"},\n {\"nbline\": 12, \"value\": \" line 2\"},\n {\"nbline\": 13, \"value\": \" line 3\"}\n ]\n ]\n ]\n]\n```\n\n\nYou can easily go back to the `python` dictionary thanks to the function `loadjson` that transforms one json variable stored in one string or in a file into a flat dictionary that is an instance of the class `ReadBlock.MKOrderedDict`.\n\n\nHow to use sections ?\n=====================\n\nThe following partial snippet shows how to use sections which allow to work with virtual files containing classical `peuf` contents indicating by `...` here.\n\n```\n==\nSection 1\n==\n\n...\n\n\n==\nSection 2 after the section 1\n==\n\n...\n```\n\n\nAbove we have used minimal forms for naming sections using only two equal signs. You can use more signs and maybe you would prefer the following convention.\n\n```\n=========\nSection 1\n=========\n\n...\n\n\n=============================\nSection 2 after the section 1\n=============================\n\n...\n```\n\n\nWorking with this kind of `peuf` files needs to import `Read` or `ReadBlock` from `orpyste.section` instead of `orpyste.data`.\n\n\nFor querypaths and also json representations, the sections are indicated by putting their name inside `<...>`.\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/bc-python/orpyste", "keywords": "python data", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "orpyste", "package_url": "https://pypi.org/project/orpyste/", "platform": "", "project_url": "https://pypi.org/project/orpyste/", "project_urls": { "Homepage": "https://github.com/bc-python/orpyste" }, "release_url": "https://pypi.org/project/orpyste/1.3.2b0/", "requires_dist": null, "requires_python": "", "summary": "orPyste is a tool to store and read simple structured datas in TXT files using a human efficient syntax.", "version": "1.3.2b0" }, "last_serial": 5572047, "releases": { "1.0.0b0": [ { "comment_text": "", "digests": { "md5": "c05804e0cf205f9f96e2c18cbdd915df", "sha256": "c7cac5cd5fc09beb0698ef96d21bff832e51314054b86ad60082edd7e02c0f0e" }, "downloads": -1, "filename": "orpyste-1.0.0b0-py3-none-any.whl", "has_sig": false, "md5_digest": "c05804e0cf205f9f96e2c18cbdd915df", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40919, "upload_time": "2016-07-27T22:33:23", "url": "https://files.pythonhosted.org/packages/57/be/9275a00db6d690a8a73ef6e57c24b9ee3d7dfcca8a237550907c7d8bb8df/orpyste-1.0.0b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d5ae43fbbb55abaa3c17e9e9c28aa479", "sha256": "6ec7239bdb7602a9e5944889e6f565776db0f21da652fd6486009c891f9a87f6" }, "downloads": -1, "filename": "orpyste-1.0.0b0.tar.gz", "has_sig": false, "md5_digest": "d5ae43fbbb55abaa3c17e9e9c28aa479", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45564, "upload_time": "2016-07-27T22:33:27", "url": "https://files.pythonhosted.org/packages/49/a3/57dec27b32d4c7338e967be64177d7caedc3e24d965c9297234e17ea3470/orpyste-1.0.0b0.tar.gz" } ], "1.0.1b0": [ { "comment_text": "", "digests": { "md5": "fc1470184e9bb98a4ea185c484659612", "sha256": "cc2ecb1bbdd2e65e327f9641203e63f396adc00f7867e819c925983297b55e7b" }, "downloads": -1, "filename": "orpyste-1.0.1b0-py3-none-any.whl", "has_sig": false, "md5_digest": "fc1470184e9bb98a4ea185c484659612", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 40965, "upload_time": "2016-07-27T23:23:08", "url": "https://files.pythonhosted.org/packages/03/bb/8b980020c39f562ef90feffd2f208c53ac79678fa38cb4c3da5c84b36370/orpyste-1.0.1b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2950cfc1fc3fa0944535178c9f30e94c", "sha256": "baaf2e3a808c7d1c4c2374ba0d79bfc05ca36c67149514d6fdf160f511eb5ed6" }, "downloads": -1, "filename": "orpyste-1.0.1b0.tar.gz", "has_sig": false, "md5_digest": "2950cfc1fc3fa0944535178c9f30e94c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45401, "upload_time": "2016-07-27T23:23:11", "url": "https://files.pythonhosted.org/packages/2d/30/73bdf633490b78a882a7d2eca2c407407d31f534ac4635564daae915df46/orpyste-1.0.1b0.tar.gz" } ], "1.1.0b0": [ { "comment_text": "", "digests": { "md5": "d66b4e5ccb4c62ca919bf2e94a86c875", "sha256": "94b22a203e1f183f5f70e7822e58174f36b131f4fbca42527b005db9d3f9674b" }, "downloads": -1, "filename": "orpyste-1.1.0b0-py3-none-any.whl", "has_sig": false, "md5_digest": "d66b4e5ccb4c62ca919bf2e94a86c875", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 44502, "upload_time": "2016-11-05T13:39:35", "url": "https://files.pythonhosted.org/packages/dc/50/4ce6a5430209a105a5675aff6d7c637482fa4045108778f28956ed47523f/orpyste-1.1.0b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db441814fd4a98ea452a6a16cf7a1626", "sha256": "7dee31bb538e2e721b86ec912a907d5ce292ce6bb42a615d243b9d9d7e260525" }, "downloads": -1, "filename": "orpyste-1.1.0b0.tar.gz", "has_sig": false, "md5_digest": "db441814fd4a98ea452a6a16cf7a1626", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47245, "upload_time": "2016-11-05T13:39:38", "url": "https://files.pythonhosted.org/packages/e5/c8/74e90e4d2cd90b3d178d33016c83b9befd4bd3e25a5f2e627e2d7015a650/orpyste-1.1.0b0.tar.gz" } ], "1.1.1b0": [ { "comment_text": "", "digests": { "md5": "06569c310832cb14729878bffb03f2c0", "sha256": "f68f3864938362ca3a670107b9e820cf01db42d3051d2cc5b8f3b462d5f4a890" }, "downloads": -1, "filename": "orpyste-1.1.1b0-py3.5.egg", "has_sig": false, "md5_digest": "06569c310832cb14729878bffb03f2c0", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 81089, "upload_time": "2017-02-19T14:24:38", "url": "https://files.pythonhosted.org/packages/2e/0d/8ad5afc0cc381573366d3015986c720e3a7726d01a485842d8166dee8059/orpyste-1.1.1b0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "0714151747ed8dce8adc9d388e87a518", "sha256": "e41357b2542b280fd115150891a5613acbcf86795f7f50a4eb079ce23d60608d" }, "downloads": -1, "filename": "orpyste-1.1.1b0-py3-none-any.whl", "has_sig": false, "md5_digest": "0714151747ed8dce8adc9d388e87a518", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 44397, "upload_time": "2016-11-07T21:48:37", "url": "https://files.pythonhosted.org/packages/15/40/c776e2f75f44d5aea6b193f735616baef349219f0a9801c78fe24dd5cbd3/orpyste-1.1.1b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b7aae9c6f1d3dfcd9a546a08bcf06aa1", "sha256": "30717916d1be1884dadde5317f42c9177e16eefa3bb97a9e88ab41aaf567c85d" }, "downloads": -1, "filename": "orpyste-1.1.1b0.tar.gz", "has_sig": false, "md5_digest": "b7aae9c6f1d3dfcd9a546a08bcf06aa1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47278, "upload_time": "2016-11-07T21:48:40", "url": "https://files.pythonhosted.org/packages/da/82/b832e9423008963ff6f04bd71a3d7c024f5d5104e4c4edf6cb326dcd53c7/orpyste-1.1.1b0.tar.gz" } ], "1.2.0b0": [ { "comment_text": "", "digests": { "md5": "cbb43255dee121aa1a8f6fae551311e0", "sha256": "ef383ff32706f904799f963b53a8f85cdc00f348678af7e136a8bec1d79a543a" }, "downloads": -1, "filename": "orpyste-1.2.0b0-py3.5.egg", "has_sig": false, "md5_digest": "cbb43255dee121aa1a8f6fae551311e0", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 135613, "upload_time": "2017-02-19T14:25:05", "url": "https://files.pythonhosted.org/packages/43/b0/8f79247b085f3084a5fd4d83aca51e976443539e7fae7650b4ff62e7a9d3/orpyste-1.2.0b0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "9f84f240637ccc868dc6bdce453de78b", "sha256": "78fef9516e5b0393b83f7d8e62c90a312fafa3c99bca6636f95fa12081b471ce" }, "downloads": -1, "filename": "orpyste-1.2.0b0-py3-none-any.whl", "has_sig": false, "md5_digest": "9f84f240637ccc868dc6bdce453de78b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 70472, "upload_time": "2017-02-19T14:24:22", "url": "https://files.pythonhosted.org/packages/a5/fa/d4642660620e86e0d85d7d140dddf7d30a94342ad5e9e91d3dcd80a2e205/orpyste-1.2.0b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a48ec57b482f3d17acd6c7f2259f85d6", "sha256": "822026e23ceb471927c2ee491a9e4c617d5c817c5532ecf207db10e19b0dfa3b" }, "downloads": -1, "filename": "orpyste-1.2.0b0.tar.gz", "has_sig": false, "md5_digest": "a48ec57b482f3d17acd6c7f2259f85d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49662, "upload_time": "2017-02-19T14:25:22", "url": "https://files.pythonhosted.org/packages/74/ab/6baf10067f42603e5021241066d4920063878ddf92068195e4d1876de8a8/orpyste-1.2.0b0.tar.gz" } ], "1.3.0b0": [ { "comment_text": "", "digests": { "md5": "5071d042b03d68aad90a3be83cd5ac4c", "sha256": "cabc921712e5bba3bb8091be9194bbb82430434237722b9056906557158cc0e1" }, "downloads": -1, "filename": "orpyste-1.3.0b0-py3.5.egg", "has_sig": false, "md5_digest": "5071d042b03d68aad90a3be83cd5ac4c", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 86561, "upload_time": "2017-04-21T22:18:05", "url": "https://files.pythonhosted.org/packages/7d/b4/e86a61e1709ecb2a48a074fd292c547f75d818a2712a56f2d2fe9a879104/orpyste-1.3.0b0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "e7496fc6063853daad43ccf4953e3ede", "sha256": "3cf0abaac096d08634ab6010de3e5a9308c5dcea592376bf6034cd43bd57ead0" }, "downloads": -1, "filename": "orpyste-1.3.0b0-py3-none-any.whl", "has_sig": false, "md5_digest": "e7496fc6063853daad43ccf4953e3ede", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 62658, "upload_time": "2017-04-21T22:15:03", "url": "https://files.pythonhosted.org/packages/2b/38/2339cd9cbcb5453cd5ba5b9c6abe3f573ae3eacb2ce019aa039e4b1c7e7d/orpyste-1.3.0b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f97de4be8a3a496fff1caf4af1e0eb1", "sha256": "d206cebc8042b7392c2202b4ae31c904f5ec765e1ff5669be666b35c81f4b250" }, "downloads": -1, "filename": "orpyste-1.3.0b0.tar.gz", "has_sig": false, "md5_digest": "6f97de4be8a3a496fff1caf4af1e0eb1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45995, "upload_time": "2017-04-21T22:15:04", "url": "https://files.pythonhosted.org/packages/8f/71/716ce5dbde134b653c2d6473e467aea0751f5cd1e9d7302d16bf2381c1b7/orpyste-1.3.0b0.tar.gz" } ], "1.3.1b0": [ { "comment_text": "", "digests": { "md5": "8b1f0b95f626dcc0739b48949e96b616", "sha256": "49f08f6023c1ac40d5ae942bb344f441e1d7146e4efb1371b0ae884f0c18ab33" }, "downloads": -1, "filename": "orpyste-1.3.1b0-py3.5.egg", "has_sig": false, "md5_digest": "8b1f0b95f626dcc0739b48949e96b616", "packagetype": "bdist_egg", "python_version": "3.5", "requires_python": null, "size": 88749, "upload_time": "2017-08-08T21:22:40", "url": "https://files.pythonhosted.org/packages/3e/af/358ad1366bdbb84935c43078d61b69108848bf7cba0b538e3dc7bc3d077d/orpyste-1.3.1b0-py3.5.egg" }, { "comment_text": "", "digests": { "md5": "ac8b4aa19807b5cfdcc7c67cc687e24f", "sha256": "d97d3dca35d40cecb821c7b73141123b1f31d764e203a21e14dfe9fc759ee8d4" }, "downloads": -1, "filename": "orpyste-1.3.1b0-py3-none-any.whl", "has_sig": false, "md5_digest": "ac8b4aa19807b5cfdcc7c67cc687e24f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 49751, "upload_time": "2017-08-08T21:22:30", "url": "https://files.pythonhosted.org/packages/9c/9e/11d3cc9264f8e7bb39b0bb370921613697a4e1d008332a8316197f183a7d/orpyste-1.3.1b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "abe9f07fb787f1bbdeecda03e63f6663", "sha256": "ffb14c54c7a2da1bc7771624e1436e0a8f8918a2299faaa8a0d0287a24195a52" }, "downloads": -1, "filename": "orpyste-1.3.1b0.tar.gz", "has_sig": false, "md5_digest": "abe9f07fb787f1bbdeecda03e63f6663", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52193, "upload_time": "2017-08-08T21:23:01", "url": "https://files.pythonhosted.org/packages/2e/bd/8ed1cc788b82e3aab3239fafea0befa110d93213bd803c1c396af5699979/orpyste-1.3.1b0.tar.gz" } ], "1.3.2b0": [ { "comment_text": "", "digests": { "md5": "ea6d11226f84562ab9a652af708b7f30", "sha256": "80794c9f9445e0c8e640e64d0cbaeecf83c28de022128e56223ca0a3c5dd5b11" }, "downloads": -1, "filename": "orpyste-1.3.2b0-py3-none-any.whl", "has_sig": false, "md5_digest": "ea6d11226f84562ab9a652af708b7f30", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 43422, "upload_time": "2019-07-23T11:45:46", "url": "https://files.pythonhosted.org/packages/aa/b3/4ee0a40561db040a8593672c8106e62b9f5fbbd5b8482a0d94c0bf97b566/orpyste-1.3.2b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd80ad0a8018fbe8504d98b2ecef98af", "sha256": "93485a505c03bee2a62ef6ade063af23a2bd152059c6426c81c54c3dbe33ddc9" }, "downloads": -1, "filename": "orpyste-1.3.2b0.tar.gz", "has_sig": false, "md5_digest": "cd80ad0a8018fbe8504d98b2ecef98af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57979, "upload_time": "2019-07-23T11:45:49", "url": "https://files.pythonhosted.org/packages/45/52/504587a09d62c0f16bcd78dee7a2509378aceda7791b8db8e9114b39c112/orpyste-1.3.2b0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ea6d11226f84562ab9a652af708b7f30", "sha256": "80794c9f9445e0c8e640e64d0cbaeecf83c28de022128e56223ca0a3c5dd5b11" }, "downloads": -1, "filename": "orpyste-1.3.2b0-py3-none-any.whl", "has_sig": false, "md5_digest": "ea6d11226f84562ab9a652af708b7f30", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 43422, "upload_time": "2019-07-23T11:45:46", "url": "https://files.pythonhosted.org/packages/aa/b3/4ee0a40561db040a8593672c8106e62b9f5fbbd5b8482a0d94c0bf97b566/orpyste-1.3.2b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd80ad0a8018fbe8504d98b2ecef98af", "sha256": "93485a505c03bee2a62ef6ade063af23a2bd152059c6426c81c54c3dbe33ddc9" }, "downloads": -1, "filename": "orpyste-1.3.2b0.tar.gz", "has_sig": false, "md5_digest": "cd80ad0a8018fbe8504d98b2ecef98af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57979, "upload_time": "2019-07-23T11:45:49", "url": "https://files.pythonhosted.org/packages/45/52/504587a09d62c0f16bcd78dee7a2509378aceda7791b8db8e9114b39c112/orpyste-1.3.2b0.tar.gz" } ] }