{ "info": { "author": "scmason", "author_email": "shane.c.mason@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Build Tools" ], "description": "Essential Document Generator\n=============================\n\nDead Simple Document Generation\n-------------------------------\n\nWhether it's testing database performance or a new web interface, we've all needed a dead simple\nsolution that'a flexible enough to generate a complex data set. If this is one of those times,\nyou've come to the right place. Essential Generators uses Markov chains to generate 'realistic' data -\nand you can train them on your own data to make it even more real.\n\nInstall\n~~~~~~~~\n\nUsing pip::\n\n pip install essential_generators\n\n\nUse case: Get some random values\n---------------------------------\nSimple interface::\n\n >>> from essential_generators import DocumentGenerator\n\n >>> gen = DocumentGenerator()\n\n >>> gen.email()\n 'cal.atis@prand.com'\n\n >>> gen.url()\n ''https://ver.co.uk/has/pron/sing/th.ablica-attrob79'\n\n >>> gen.phone()\n '547-922-3848'\n\n >>> gen.slug()\n 'ehillote-henaiour-ebemaice-qsiat76-heheellti'\n\n >>> gen.word()\n 'choleg'\n\n >>> gen.sentence()\n 'Possess something historic and prehistoric sites within the family.'\n\n >>> gen.paragraph()\n \"Country's total that roll clouds of gas that can affect. Officers: lieutenant aquifer system under\n the alaska supreme court, 14. About reality. perfect. this means that logic programs combine declarative\n and procedural law. some. 20.3% of other nations. during the meiji constitution, and assembled the imperial\n estates. Reduce visibility work during the regime withdrew from the crow in. Divert recyclable at 100.\n Applications. because no carbon, then all of which glucose (c6h12o6) and stearin (c57h110o6) are convenient.\n In french. forms can each be divided into: information theory. Therapeutic orientation. around haines. steven\n seagal's 1994 on deadly ground, starring michael caine.. Lakes and economic assistance (comecon). the states\n and 72 dependent. D.f.: comisi\u00f3n campaign tracking, allowing the companies running these. Were struggling moon\n io is volcanically active, and as the legal basis of chemical complexes.'\n\nUse case: Make lots of complex documents\n----------------------------------------\n\nLet's say we are building a database for a new social media site. We have a preliminary schema and\nwant to test the server with some examples like this::\n\n\n {\n id: 39f96ef8-08e0-408e-b727-984372a95d9d,\n status: online,\n age: 27,\n homepage: johndoe.github.io,\n name: John Doe,\n headline: A Really Cool Guy\n about: Some longer profile text. Several Sentences.\n }\n\nDocument Templates\n~~~~~~~~~~~~~~~~~~\n\nNow let's say we want to generate hundreds of thousands of these records. For making documents,\nwe first need to define the template::\n\n gen = DocumentGenerator()\n\n template = {\n 'id': 'guid',\n 'status': ['online', 'offline', 'dnd', 'anonymous'],\n 'age': 'small_int',\n 'homepage': 'url',\n 'name': 'name',\n 'headline': 'sentence',\n 'about': 'paragraph'\n }\n\n gen.set_template(template)\n documents = gen.documents(1000)\n\nThe template gives the structure and type for each field in the document. Note that `status` has\na list and not a single type; when a list is provided as the type, one of the items in the list\nwill be randomly selected for each generated documents using `random.choice(list)`\n\nCustom Fields\n~~~~~~~~~~~~~\n\nNow we want to implement a new feature where users can rate each other between 1-5 stars and we want\nto keep track of the average rating (a float between 1 and 5). We can do this by passing in a\nfunction as the type, like so::\n\n def gen_rating():\n return random.uniform(1, 5)\n\n template = {\n 'id': 'guid',\n 'status': ['online', 'offline', 'dnd', 'anonymous'],\n 'age': 'small_int',\n 'homepage': 'url',\n 'name': 'name',\n 'headline': 'sentence',\n 'about': 'paragraph',\n 'rating': gen_rating,\n }\n\n\nIn this case, when each document is created, `gen_rating` is called and the returned value is\nadded to the document.\n\nNested Documents\n~~~~~~~~~~~~~~~~\n\nNow that users are rating each other, of course they'll want to get in contact with each other.\nThe schema gets extended to include a nested `contact` object. Just like any custom field, we can\ngenerate nested documents using generator functions as the type::\n\n def gen_contact():\n return {\n 'email': gen.email(),\n 'phone': gen.phone()\n }\n\n template = {\n 'id': 'guid',\n 'status': ['online', 'offline', 'dnd', 'anonymous'],\n 'age': 'small_int',\n 'homepage': 'url',\n 'name': 'name',\n 'headline': 'sentence',\n 'about': 'paragraph',\n 'contact': gen_contact\n }\n\n\nWord & Sentence Caching\n~~~~~~~~~~~~~~~~~~~~~~~\n\nCreating word and sentence cache's serves two purposes: it resticts the possible space of generated\nelements to a discreet size (for instance, the average American's vocabulary is between 5k and 10k\nwords) and it greatly speeds subsequent document generation. Use them like this::\n\n gen.init_word_cache(5000)\n gen.init_sentence_cache(5000)\n\nIn the first line, 5000 words are generated. In the second line, 5000 sentences made up of 5 to\n15 words from the word cache will be generated. subsequent call to `gen.word()` and `gen.sentence()`\nwill be selected from the caches. If you want to generate a new to a word or sentence not in the\ncache, call `gen.gen_word()` and `gen.gen_sentence()` respectively. If you want finer grain control,\n`gen.word_cache` and `gen.sentence_cache` are arrays of strings that can be directly manipulated.\n\nUnique Fields\n~~~~~~~~~~~~~\nIn this case, we want to gaurantee that the fields are unique. You can accomplish this by choosing 'guid'\nas the field types, but that isn't good enough if you want the field to still look like an email address or a number. For\nthis case, we introduce the unique field::\n\n template = {\n 'id': 'guid',\n 'status': ['online', 'offline', 'dnd', 'anonymous'],\n 'age': 'small_int',\n 'homepage': 'url',\n 'name': 'name',\n 'headline': 'sentence',\n 'about': 'paragraph',\n 'primary_email': {'typemap': 'email', 'unique': True, 'tries': 10}\n }\n\n\nIn the primary_email field above, we passed a dictionary with the following pairs::\n\n typemap - what field type to generate (in this case 'email')\n unique - tells the generator that each value should be unique\n tries - the number of times that gen.email() will be called to try and get a unique entry. If a unique item can not\n generated in _tries_ iterations, the same number of iterations will be tried by generating a value and then adding\n 1-5 random chars appended. If a unique value still isn't generated, then GUIDs are generated until a unique one is\n found.\n\nThe generator does its honest best to try and honor the type sent, but it prioritizes uniqueness. The default number of\ntries is 10, so from our example above::\n\n 10 attempts with 'generator.email()'\n 10 attempts with 'generator.email() + generator.gen_chars()'\n infinite attempts with generator.guid()\n\n\nFiner Grained Control\n~~~~~~~~~~~~~~~~~~~~~\n\nNow we want the user to be able to set a link to their current favorite post. You could do this\nby adding a field called 'favpost' and settings its type to 'slug' (like the ones used to url-encode\nblog post ids while keeping them human readable). The problem is, this would likely generate a\nunique favpost for each document, but in the real world there would be a finite set of posts.\n\nYou can control this behaviour by using python lists as the type. In this example, we use a list\ncomprehension to generate a list of 1000 slugs that will be randomly seletected from when the documents\nare generated::\n\n template = {\n 'id': 'guid',\n 'status': ['online', 'offline', 'dnd', 'anonymous'],\n 'age': 'small_int',\n 'homepage': 'url',\n 'name': 'name',\n 'headline': 'sentence',\n 'about': 'paragraph',\n 'favpost': [gen.slug() for n in range(1000)]\n }\n\n\n\n\n\nSo, what did we end up with?\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis is one result::\n\n {\n 'name': 'Ster Ev',\n 'age': 87,\n 'status': 'anonymous',\n 'favpost': 'anre-regtehcie57',\n 'headline': 'ilrendna anr mo inttuonth anuir',\n 'homepage': 'http://enar692.com/ten/erst/eresnn.heotiatin-neworwnti54-atnd',\n 'id': 'ced10e96-b02c-4292-9be8-22dd8772c64e',\n 'rating': 1.9779484996288086,\n 'contact': {\n 'email': 'osat@ind.ru',\n 'phone': '695-323-8276'\n }\n 'about': 'Yeormftd or an on authar hei po heheat este ler hearain hethe\n hetiarte ti oren. Oncs yemf edhe inhe th bain thfin nanfee st. Thheannd\n chenes hein thin. Edrdth ttind te uearedor heoea hehaeren seonstth tith\n vemoal an rein gel don in. Anao is fecttrr.',\n\n }\n\nDocuments are basic Python dictionaries, so you can use the directly in your program or convert\nthem to json or any other serialization format for testing anywhere.\n\nWord and Text Generation\n-------------------------\n\nEssential generators come with 3 builtin word and text generators:\n\n**MarkovTextGenerator**\nThis approach uses a Markov chain to generate text. In this case, the generator is trained on text\nto generate somewhat realistic random text from real words.\n\n**MarkovWordGenerator**\nThis approach uses a Markov chain to generate words. In this case, the generator is trained on text\nto generate somewhat realistic random words based on observed words.\n\n**StatisticTextGenerator**\nThis approach uses statistical distributions to generate words that are similar to real words.\n\nMarkovTextGenerator\n~~~~~~~~~~~~~~~~~~~~\n**MarkovTextGenerator** generates random text from real words using word level bigram frequency. This is the default for generating\nsentences and paragraphs.\n\nExample Word::\n\n fifteen\n\nExample Text::\n\n reports the its citizens holding a tertiary education degree. Although Japan has 19 World Heritage List, fifteen of which\n track the same species, several intermediate stages occur between sea and to a professional social network analysis,\n network science, sociology, ethnography, statistics, optimization, and mathematics. The Vega Science Trust \u2013 science\n videos, including physics Video: Physics \"Lightning\" Tour with Justin Morgan 52-part video course...\n\n\nMarkovWordGenenerator\n~~~~~~~~~~~~~~~~~~~~~~\n**MarkovWordGenenerator** generates random words from real letters using letter level bigram frequency. This is the default for\ngenerating words (also used for emails, names and domains)\n\nExample Word::\n\n groboo\n\nExample Text::\n\n Remes way by entrun co. Forche 40-194 quilim The lace colost thigag toures loples opprou Alpite go. of andian It Afte\n imps stions revain Goto Stedes remapp go coutle Sountl doingu ablech thed al in whiclu thican Ocepro In havelo var clowne\n the of couthe...\n\nStatisticWordGenerator\n~~~~~~~~~~~~~~~~~~~~~~\n**StatisticWordGenerator** generates random words from statistical distributions observed in a large corpus.\n\nExample Word::\n\n anamer\n\nExample Text::\n\n inhe nobh ner ared hetethes tehelnd tisti isthinthe enin onheanar otes bttusaer sth ensa stonth ndns dhe er enhel cehes\n voon ra anwm on ies trinthedes heenitesed aloi ot re onthdmed onon ataa nan nated inth\n\nYou can select the approach you want when initializing the document generator::\n\n\n #use default generators\n gen = DocumentGenerator()\n #also default\n gen = DocumentGenerator(text_generator=MarkovTextGenerator(), word_generator=MarkovWordGenerator())\n #use MarkovWordGenerator for both\n gen = DocumentGenerator(text_generator=MarkovWordGenerator())\n #use StatisticTextGenerator for both\n gen = DocumentGenerator(text_generator=StatisticTextGenerator(), word_generator=StatisticTextGenerator())\n\n\n\nCreating New Models\n-------------------\n\nEssential Generator's ships with text and word models built from a variety of wikipedia articles.\nThere are three scripts included to help you generate new models:\n\nbuild_corpus.py - Retrieves specified articles from wikipedia to use when training the models. Default output is\n'corpus.txt'.\nbuild_text_model.py - Uses corpus.txt to output markov_textgen.json as the text model for sentences and paragraphs.\nbuild_word_model.py - Uses corpus.txt to output markov_wordgen.json as the word model (for words, email, domains etc)\n\nDisclaimer\n-----------\n\nThe purpose of this module is to quickly generate data for use cases like load testing and\nperformance evaluations. It attempts to mimic real data, but will not have the frequency or\nstatistical qualities of real world data. There are no warranties and this shouldn't\nbe used for scientific, health or industrial purposes and so on...\n\n\nWhy did I build this?\n-----------------------\n\nThere are several great python module out there that generate fake data, so why did I make this?\nTwo reasons really:\n\n1. I wanted a dead simple way to generate data to test other projects and I just wasn't finding\nthe flexibility I was looking for.\n2. One of my problems with the existing approaches was the limited number of 'lorem ipsum' style words\nthat were available to generate text. I wanted to build a better lorem ipsum generator and this\nmade a nice platform.\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/shane-mason/essential-document-generator", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "essential-generators", "package_url": "https://pypi.org/project/essential-generators/", "platform": "", "project_url": "https://pypi.org/project/essential-generators/", "project_urls": { "Homepage": "https://github.com/shane-mason/essential-document-generator" }, "release_url": "https://pypi.org/project/essential-generators/0.9.2/", "requires_dist": null, "requires_python": "", "summary": "Generate fake data for application testing based on simple but flexible templates.", "version": "0.9.2" }, "last_serial": 3184432, "releases": { "0.4": [ { "comment_text": "", "digests": { "md5": "326c633d6ece765a05e1f6ac29173ebb", "sha256": "d975456c769f2a06526861d43ab4d8312dcfc33adedd52eafe0c389a03a3654f" }, "downloads": -1, "filename": "essential_generators-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "326c633d6ece765a05e1f6ac29173ebb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11514, "upload_time": "2017-01-10T17:45:40", "url": "https://files.pythonhosted.org/packages/1f/45/2e46c1b6e3074634ce75b0ca1642f32d4012cc04f56e186ee49f1c5315e0/essential_generators-0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8fa3cbafd3dfa733a10d6f3d69c85c3a", "sha256": "be5cd613ead1793e96fe0f910ca8452ddf39b11f946eb25e741ed809dfc44720" }, "downloads": -1, "filename": "essential_generators-0.4.zip", "has_sig": false, "md5_digest": "8fa3cbafd3dfa733a10d6f3d69c85c3a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15973, "upload_time": "2017-01-10T17:45:42", "url": "https://files.pythonhosted.org/packages/4e/d3/0e70db052d308f0258aaf5ecbd96b3905712e1a0e0ec32337fcf121044c9/essential_generators-0.4.zip" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "7a2bb4ebf604a76f3d8b126f7713afe7", "sha256": "107f9c33675cb32931f578a40eed8dc0d14f8f421a63b809cd828490f6d30ac2" }, "downloads": -1, "filename": "essential_generators-0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "7a2bb4ebf604a76f3d8b126f7713afe7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9457140, "upload_time": "2017-01-26T20:21:08", "url": "https://files.pythonhosted.org/packages/b0/7c/294a7d217a6ef6a27160b283ee57ce82f74f1c6e4aaefce85e647fbc4628/essential_generators-0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "451fe9c7d519b6bfcc78b531d95106ce", "sha256": "9e1eb769a186a6ce438f5eb8ed10fd6e7f85b779a73a659ceeee186d707161cf" }, "downloads": -1, "filename": "essential_generators-0.5.zip", "has_sig": false, "md5_digest": "451fe9c7d519b6bfcc78b531d95106ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9463274, "upload_time": "2017-01-26T20:21:16", "url": "https://files.pythonhosted.org/packages/f4/e6/08ba0082b7073600262393f8cb418f15982bb25aabd0d8197f5880255e11/essential_generators-0.5.zip" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "bb288a8f8f00cd7fca45259c350095ef", "sha256": "64593f3ff6b6874c54d8f58b63f0acf14b0e86ff7ebff0742734a9692e1a60cf" }, "downloads": -1, "filename": "essential_generators-0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "bb288a8f8f00cd7fca45259c350095ef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9457146, "upload_time": "2017-01-26T20:37:15", "url": "https://files.pythonhosted.org/packages/9b/eb/765aa1c7f616865202f7e73d4bb60aa224911490440192a1c4fd51381cf6/essential_generators-0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2e9328e0435ab48d07c840e57937c71b", "sha256": "809be85737e486b0daa4f7f36ea371ee34ef2bc1be7c5c87c7d9c10d14476481" }, "downloads": -1, "filename": "essential_generators-0.6.zip", "has_sig": false, "md5_digest": "2e9328e0435ab48d07c840e57937c71b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9463285, "upload_time": "2017-01-26T20:37:29", "url": "https://files.pythonhosted.org/packages/bc/c6/f16cfb0fb9efc55a8019f554cf7c233d3049b3451972278b9a8880c42ecd/essential_generators-0.6.zip" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "7b1865212147729544de45c6e27f7aaf", "sha256": "bb32eacb6f05f8f7ca1d1705eabf7187df7af93e076a87439b5e254508cb3269" }, "downloads": -1, "filename": "essential_generators-0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "7b1865212147729544de45c6e27f7aaf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9457146, "upload_time": "2017-01-26T20:43:45", "url": "https://files.pythonhosted.org/packages/18/c7/6f8794264abfedc27c035fef2bc1d55b59a64618949a477a001a79f9acc4/essential_generators-0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8915052d5dabb07be255e8bd8de9faa0", "sha256": "ad146da0811177224a50898d033ff664cd9e03af6cd959b9668fbe33dbdd79cf" }, "downloads": -1, "filename": "essential_generators-0.7.zip", "has_sig": false, "md5_digest": "8915052d5dabb07be255e8bd8de9faa0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9463305, "upload_time": "2017-01-26T20:43:54", "url": "https://files.pythonhosted.org/packages/d2/2b/03d6e1b5d0946251c7b1ccbfb1ef5472bed863719d51929a1dc32829733d/essential_generators-0.7.zip" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "f2f9f96de11ace6d4b2a16b3a77f71d6", "sha256": "377bc18e2203fffbb2514b74573e17d1033e136e794339d5cad909ad21578b82" }, "downloads": -1, "filename": "essential_generators-0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "f2f9f96de11ace6d4b2a16b3a77f71d6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9458282, "upload_time": "2017-09-19T04:17:25", "url": "https://files.pythonhosted.org/packages/5f/e2/2b21d05bfffbd952dd4013649c4f9eb91d5fa3e663ceed0256f6df9c1277/essential_generators-0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2b49eb360cf93d88368a1a5a718c49c1", "sha256": "a2ea6e5f834f13ff37739e9eb900c624a336c3c681ad471b44791642f42e87cb" }, "downloads": -1, "filename": "essential_generators-0.8.tar.gz", "has_sig": false, "md5_digest": "2b49eb360cf93d88368a1a5a718c49c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9225741, "upload_time": "2017-09-19T04:18:10", "url": "https://files.pythonhosted.org/packages/c2/5e/bb38d9624c9e435e1bcbc004148adc30230dff400f11e4f12cd6c5e7c996/essential_generators-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "a4068079d82c0305a87e1399be747fae", "sha256": "ab2e807ce0af4a6172bc50a224b70a509dd0e1752113f7d80bcf8aa80d047bfb" }, "downloads": -1, "filename": "essential_generators-0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "a4068079d82c0305a87e1399be747fae", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9458374, "upload_time": "2017-09-19T04:28:07", "url": "https://files.pythonhosted.org/packages/d4/10/294365941b1985619a6fd0edd96d818cd4290be93904212826931bfd4b04/essential_generators-0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e1744d28b7109e8aa99ba6e09a6e3a7", "sha256": "fe6a7f141f1c911e1a571878c218b9c5c6e3d35e6e95c0277b5c128fae30e555" }, "downloads": -1, "filename": "essential_generators-0.9.tar.gz", "has_sig": false, "md5_digest": "9e1744d28b7109e8aa99ba6e09a6e3a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9225803, "upload_time": "2017-09-19T04:28:58", "url": "https://files.pythonhosted.org/packages/7b/da/e624b5d14d75aaf7e7f8c4a974af6892df68392b40513e6486912197cdc8/essential_generators-0.9.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "22f16a2a0fb02b970ca1739b1282d2cf", "sha256": "903d9e6b929147eb30fcb518fe13529664f9c47e5ea1b923e7c94dfd10f2b68e" }, "downloads": -1, "filename": "essential_generators-0.9.1-py3-none-any.whl", "has_sig": false, "md5_digest": "22f16a2a0fb02b970ca1739b1282d2cf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9458414, "upload_time": "2017-09-19T05:12:31", "url": "https://files.pythonhosted.org/packages/74/d9/080eb026d92fc422ce693d461112e8a06b812ae735e4f67d017f505b23b5/essential_generators-0.9.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e6f8ae9029605bafddcc99762c46c9e7", "sha256": "6273297cfb098840ee541b7b7e6fba8a995d5564e5c709ba4c30325796d890e2" }, "downloads": -1, "filename": "essential_generators-0.9.1.tar.gz", "has_sig": false, "md5_digest": "e6f8ae9029605bafddcc99762c46c9e7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9225895, "upload_time": "2017-09-19T05:13:19", "url": "https://files.pythonhosted.org/packages/09/25/c458c06950f880af6eaf7685910a29af21d56545f0b9cfd075b796a34974/essential_generators-0.9.1.tar.gz" } ], "0.9.2": [ { "comment_text": "", "digests": { "md5": "03388aa88ad2753fbf748e6cb3cd06fa", "sha256": "b123b4a55afc693a249ebc1ab794d5d50d6d31595f15586a2e8bd6aaca16b7cd" }, "downloads": -1, "filename": "essential_generators-0.9.2-py3-none-any.whl", "has_sig": false, "md5_digest": "03388aa88ad2753fbf748e6cb3cd06fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9458420, "upload_time": "2017-09-19T05:35:06", "url": "https://files.pythonhosted.org/packages/59/b1/979b823497488e5f13c9070fcd6a2e24f6d9c6fd5398e0fbeccc8158bd3b/essential_generators-0.9.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f5b0f5bd66a48dc49895d57c60453bd", "sha256": "7d2049ec78de0fa1ae6b5f114428471023c143ffbf2c7bb050c9b181f0f74960" }, "downloads": -1, "filename": "essential_generators-0.9.2.tar.gz", "has_sig": false, "md5_digest": "6f5b0f5bd66a48dc49895d57c60453bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9225907, "upload_time": "2017-09-19T05:35:56", "url": "https://files.pythonhosted.org/packages/78/b8/d4c9c0a6e2183b021b57c0196f89da024983f5acf76298f4250f0bad61f2/essential_generators-0.9.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "03388aa88ad2753fbf748e6cb3cd06fa", "sha256": "b123b4a55afc693a249ebc1ab794d5d50d6d31595f15586a2e8bd6aaca16b7cd" }, "downloads": -1, "filename": "essential_generators-0.9.2-py3-none-any.whl", "has_sig": false, "md5_digest": "03388aa88ad2753fbf748e6cb3cd06fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9458420, "upload_time": "2017-09-19T05:35:06", "url": "https://files.pythonhosted.org/packages/59/b1/979b823497488e5f13c9070fcd6a2e24f6d9c6fd5398e0fbeccc8158bd3b/essential_generators-0.9.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6f5b0f5bd66a48dc49895d57c60453bd", "sha256": "7d2049ec78de0fa1ae6b5f114428471023c143ffbf2c7bb050c9b181f0f74960" }, "downloads": -1, "filename": "essential_generators-0.9.2.tar.gz", "has_sig": false, "md5_digest": "6f5b0f5bd66a48dc49895d57c60453bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9225907, "upload_time": "2017-09-19T05:35:56", "url": "https://files.pythonhosted.org/packages/78/b8/d4c9c0a6e2183b021b57c0196f89da024983f5acf76298f4250f0bad61f2/essential_generators-0.9.2.tar.gz" } ] }