{ "info": { "author": "crohaco", "author_email": "crohaco.net@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Topic :: Software Development" ], "description": "Requirements\n============\n\n- Python 2.7 or later.\n\nInstall\n=======\n\n.. code-block:: sh\n\n $ pip install tesdat\n\n\nUsage\n=====\n\nBasic Example\n-------------\n\n.. code-block:: python\n\n In [1]: import tesdat\n\n In [2]: model = tesdat.getmodel({\n ...: 'id': tesdat.IncrementPattern(),\n ...: 'x': tesdat.CyclePattern(['a', 'b', 'c']),\n ...: # BLANK will be omit.\n ...: 'option': tesdat.ChoicePattern([True, False, tesdat.BLANK]),\n ...: })\n\n In [3]: container = tesdat.ListContainer(model, 5, render=True)\n\n In [4]: container\n Out[4]:\n [{'id': 1, 'x': 'a'},\n {'id': 2, 'x': 'b', 'option': False},\n {'id': 3, 'x': 'c', 'option': True},\n {'id': 4, 'x': 'a'},\n {'id': 5, 'x': 'b'}]\n\n # specify rewrite=True, if file already exists.\n In [5]: tesdat.JsonFormatter(container).write('/tmp/test.json', rewrite=True)\n\n In [6]: !cat /tmp/test.json\n [\n {\n \"x\": \"a\",\n \"id\": 1\n },\n {\n \"x\": \"b\",\n \"id\": 2,\n \"option\": false\n },\n {\n \"x\": \"c\",\n \"id\": 3,\n \"option\": true\n },\n {\n \"x\": \"a\",\n \"id\": 4\n },\n {\n \"x\": \"b\",\n \"id\": 5\n }\n ]\n\nTSV Example\n-----------\n\n.. code-block:: python\n\n In [1]: import tesdat\n\n In [2]: model = tesdat.getmodel([\n ...: tesdat.IncrementPattern(start=10, step=5),\n ...: tesdat.HashOfPattern(2, 'md5'), # hashing value of the third column.\n ...: tesdat.ChoicePattern(['foo', 'bar', 'baz']),\n ...: tesdat.CyclePattern(range(0, 30, 10)),\n ...: ]).ordering(2) # render at first index:2(third column)\n\n # IterContainer is saving memory, because generating an element each time.\n In [3]: container = tesdat.IterContainer(model, 10) # repeat 10 times.\n\n In [4]: tesdat.CsvFormatter(\n ...: container,\n ...: delimiter='\\t',\n ...: header=['id', 'hash-of-name', 'name', 'value']\n ...: ).write('/tmp/test.csv', rewrite=True)\n\n In [5]: !cat /tmp/test.csv\n id\thash-of-name\tname\tvalue\n 10\tacbd18db4cc2f85cedef654fccc4a4d8\tfoo\t0\n 15\tacbd18db4cc2f85cedef654fccc4a4d8\tfoo\t10\n 20\t73feffa4b7f6bb68e44cf984c85f6e88\tbaz\t20\n 25\tacbd18db4cc2f85cedef654fccc4a4d8\tfoo\t0\n 30\tacbd18db4cc2f85cedef654fccc4a4d8\tfoo\t10\n 35\t73feffa4b7f6bb68e44cf984c85f6e88\tbaz\t20\n 40\t73feffa4b7f6bb68e44cf984c85f6e88\tbaz\t0\n 45\t73feffa4b7f6bb68e44cf984c85f6e88\tbaz\t10\n 50\t37b51d194a7513e45b56f6524f2d51f2\tbar\t20\n 55\t37b51d194a7513e45b56f6524f2d51f2\tbar\t0\n\nCustom Example\n--------------\nif object is callable, store execution result.\n\nModel\n~~~~~\n\n.. code-block:: python\n\n In [1]: import tesdat\n\n In [2]: def square(k, i):\n ...: return k * i\n ...:\n\n In [3]: container = tesdat.DictContainer(square)\n\n In [4]: container(['a', 'b', 'c', 'd', 'e'])\n Out[4]: {'a': '', 'b': 'b', 'c': 'cc', 'd': 'ddd', 'e': 'eeee'}\n\n\nPattern\n~~~~~~~\n\n.. code-block:: python\n\n In [1]: import tesdat\n\n In [2]: model = tesdat.getmodel({\n ...: 'col1': (lambda r, i: i),\n ...: 'col2': (lambda r: r['col1'] + 1),\n ...: 'col3': (lambda r: r['col2'] * 2),\n ...: 'col4': 100, # fixed value\n ...: }).ordering('col1', 'col2', 'col3')\n\n In [3]: container = tesdat.ListContainer(model)\n\n In [4]: container(4)\n Out[4]:\n [{'col1': 0, 'col2': 1, 'col3': 2, 'col4': 100},\n {'col1': 1, 'col2': 2, 'col3': 4, 'col4': 100},\n {'col1': 2, 'col2': 3, 'col3': 6, 'col4': 100},\n {'col1': 3, 'col2': 4, 'col3': 8, 'col4': 100}]\n\n\nLimited number of element Example\n---------------------------------\n\n.. code-block:: python\n\n In [1]: import tesdat\n\n In [2]: model = tesdat.getmodel({\n ...: # x: a is 1times limited. / b is 2times limited. / c is 3times limited.\n ...: 'x': tesdat.PickoutPattern({'a': 1, 'b': 2, 'c': 3}, missing=None),\n ...: # y: a is 2times limited. / b and c is 1times limited.\n ...: 'y': tesdat.PickoutPattern(['a', 'a', 'b', 'c'], missing='*'),\n ...: # z: a and b can't be selected. / c is 5times limited.\n ...: 'z': tesdat.PickoutPattern(['c']*5, missing=None),\n ...: })\n\n In [3]:\n\n In [3]: container = tesdat.ListContainer(model)\n\n In [4]: container(6)\n Out[4]:\n [{'x': 'a', 'y': 'a', 'z': 'c'},\n {'x': 'c', 'y': 'b', 'z': 'c'},\n {'x': 'c', 'y': 'a', 'z': 'c'},\n {'x': 'b', 'y': 'c', 'z': 'c'},\n {'x': 'c', 'y': '*', 'z': 'c'},\n {'x': 'b', 'y': '*', 'z': None}]\n\n\nCombination Example\n-------------------\nTo generate the testdata that combines multiple elements\ncan be achieved by using the repeat-argument of CyclePattern and SequencePattern.\n\n.. code-block:: python\n\n In [1]: import tesdat\n\n In [2]: l0 = ['a', 'b']\n\n In [3]: l1 = ['a', 'b', 'c']\n\n In [4]: l2 = ['a', 'b', 'c', 'd']\n\n In [5]: model = tesdat.getmodel([\n ...: tesdat.SequencePattern(l0, repeat=len(l1)*len(l2), missing=tesdat.ESCAPE),\n ...: tesdat.CyclePattern(l1, repeat=len(l2)),\n ...: tesdat.CyclePattern(l2),\n ...: ])\n\n In [6]: container = tesdat.Container(model)\n\n # by specifying the ESCAPE to missing-argument\n # automatically detect end of elements and escape before reaching 10000.\n In [7]: container(10000)\n Out[7]:\n [['a', 'a', 'a'],\n ['a', 'a', 'b'],\n ['a', 'a', 'c'],\n ['a', 'a', 'd'],\n ['a', 'b', 'a'],\n ['a', 'b', 'b'],\n ['a', 'b', 'c'],\n ['a', 'b', 'd'],\n ['a', 'c', 'a'],\n ['a', 'c', 'b'],\n ['a', 'c', 'c'],\n ['a', 'c', 'd'],\n ['b', 'a', 'a'],\n ['b', 'a', 'b'],\n ['b', 'a', 'c'],\n ['b', 'a', 'd'],\n ['b', 'b', 'a'],\n ['b', 'b', 'b'],\n ['b', 'b', 'c'],\n ['b', 'b', 'd'],\n ['b', 'c', 'a'],\n ['b', 'c', 'b'],\n ['b', 'c', 'c'],\n ['b', 'c', 'd']]\n\nnested example\n--------------\n\n.. code-block:: python\n\n In [1]: import tesdat\n\n In [2]: model = tesdat.getmodel({\n ...: 'a': tesdat.getmodel([\n ...: tesdat.CyclePattern(['b', 'c']),\n ...: tesdat.CyclePattern(['d', 'e']),\n ...: ]),\n ...: tesdat.ChoicePattern(['f', 'g', 'h']): tesdat.DictContainer(lambda x: x * 2, 5)\n ...: })\n\n In [3]: tesdat.Container(model, 10, render=True)\n Out[3]:\n [{'a': ['b', 'd'], 'h': {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}},\n {'a': ['c', 'e'], 'f': {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}},\n {'a': ['b', 'd'], 'f': {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}},\n {'a': ['c', 'e'], 'g': {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}},\n {'a': ['b', 'd'], 'f': {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}},\n {'a': ['c', 'e'], 'h': {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}},\n {'a': ['b', 'd'], 'g': {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}},\n {'a': ['c', 'e'], 'h': {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}},\n {'a': ['b', 'd'], 'h': {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}},\n {'a': ['c', 'e'], 'h': {0: 0, 1: 2, 2: 4, 3: 6, 4: 8}}]\n\ndatetime Utility\n----------------\n\nchoice\n~~~~~~\n\nrandom choice between start and end.\n\n.. code-block:: python\n\n In [1]: from tesdat.utils.datetime import choice\n\n\n In [2]: choice(1988, '2015-11-11T11:11:11.111111')\n Out[2]: datetime.datetime(2009, 11, 30, 23, 25, 43, 240031)\n\n # tuple: datetime(*tuple), dict: datetime(**dict)\n In [3]: choice((1988, 5, 22), {'year': 2015, 'month': 11, 'day': 11})\n Out[3]: datetime.datetime(1996, 7, 1, 11, 14, 59, 314809)\n\n In [4]: from datetime import datetime, date\n\n In [5]: choice(date(1988, 5, 22), datetime(2015, 11, 11, 11, 11, 11))\n Out[5]: datetime.datetime(2011, 3, 23, 19, 39, 14, 476901)\n\ngenerator\n~~~~~~~~~\n\ngenerator that generate the datetime object at regular intervals.\n\n.. code-block:: python\n\n In [1]: from datetime import timedelta\n In [2]: from tesdat.utils.datetime import generator\n\n # if you omit end-argument, then it creates an object infinitely.\n In [3]: g = generator(start=2015, interval=timedelta(days=1, hours=12))\n\n In [4]: next(g)\n Out[4]: datetime.datetime(2015, 1, 1, 0, 0)\n\n In [5]: next(g)\n Out[5]: datetime.datetime(2015, 1, 2, 12, 0)\n\n In [6]: next(g)\n Out[6]: datetime.datetime(2015, 1, 4, 0, 0)\n\n In [7]: next(g)\n Out[7]: datetime.datetime(2015, 1, 5, 12, 0)\n\nrange\n~~~~~\n\ngenerate list object that includes regularly generated datetime objects element.\n\n.. code-block:: python\n\n In [1]: from datetime import timedelta\n In [2]: from tesdat.utils.datetime import range\n\n In [3]: range(2015, '2015/2/1')\n Out[3]:\n [datetime.datetime(2015, 1, 1, 0, 0),\n datetime.datetime(2015, 1, 2, 0, 0),\n datetime.datetime(2015, 1, 3, 0, 0),\n datetime.datetime(2015, 1, 4, 0, 0),\n datetime.datetime(2015, 1, 5, 0, 0),\n datetime.datetime(2015, 1, 6, 0, 0),\n datetime.datetime(2015, 1, 7, 0, 0),\n datetime.datetime(2015, 1, 8, 0, 0),\n datetime.datetime(2015, 1, 9, 0, 0),\n datetime.datetime(2015, 1, 10, 0, 0),\n datetime.datetime(2015, 1, 11, 0, 0),\n datetime.datetime(2015, 1, 12, 0, 0),\n datetime.datetime(2015, 1, 13, 0, 0),\n datetime.datetime(2015, 1, 14, 0, 0),\n datetime.datetime(2015, 1, 15, 0, 0),\n datetime.datetime(2015, 1, 16, 0, 0),\n datetime.datetime(2015, 1, 17, 0, 0),\n datetime.datetime(2015, 1, 18, 0, 0),\n datetime.datetime(2015, 1, 19, 0, 0),\n datetime.datetime(2015, 1, 20, 0, 0),\n datetime.datetime(2015, 1, 21, 0, 0),\n datetime.datetime(2015, 1, 22, 0, 0),\n datetime.datetime(2015, 1, 23, 0, 0),\n datetime.datetime(2015, 1, 24, 0, 0),\n datetime.datetime(2015, 1, 25, 0, 0),\n datetime.datetime(2015, 1, 26, 0, 0),\n datetime.datetime(2015, 1, 27, 0, 0),\n datetime.datetime(2015, 1, 28, 0, 0),\n datetime.datetime(2015, 1, 29, 0, 0),\n datetime.datetime(2015, 1, 30, 0, 0),\n datetime.datetime(2015, 1, 31, 0, 0),\n datetime.datetime(2015, 2, 1, 0, 0)]\n\n # +-3 hour noise, +5 minute noise\n In [4]: range(2015, '2015-01-15', hours=3, minutes=(0, 5))\n Out[4]:\n [datetime.datetime(2015, 1, 1, 3, 1),\n datetime.datetime(2015, 1, 2, 0, 3),\n datetime.datetime(2015, 1, 3, 2, 0),\n datetime.datetime(2015, 1, 3, 22, 2),\n datetime.datetime(2015, 1, 4, 22, 3),\n datetime.datetime(2015, 1, 6, 0, 2),\n datetime.datetime(2015, 1, 7, 0, 4),\n datetime.datetime(2015, 1, 8, 0, 4),\n datetime.datetime(2015, 1, 8, 21, 3),\n datetime.datetime(2015, 1, 9, 22, 0),\n datetime.datetime(2015, 1, 11, 0, 0),\n datetime.datetime(2015, 1, 11, 22, 1),\n datetime.datetime(2015, 1, 12, 22, 5),\n datetime.datetime(2015, 1, 14, 3, 0),\n datetime.datetime(2015, 1, 15, 2, 5)]\n\n # it is able to specify minus direction as interval.\n In [5]: range(start='2015-5-22', end='2015-04-22', interval=timedelta(days=-1))\n Out[5]:\n [datetime.datetime(2015, 5, 22, 0, 0),\n datetime.datetime(2015, 5, 21, 0, 0),\n datetime.datetime(2015, 5, 20, 0, 0),\n datetime.datetime(2015, 5, 19, 0, 0),\n datetime.datetime(2015, 5, 18, 0, 0),\n datetime.datetime(2015, 5, 17, 0, 0),\n datetime.datetime(2015, 5, 16, 0, 0),\n datetime.datetime(2015, 5, 15, 0, 0),\n datetime.datetime(2015, 5, 14, 0, 0),\n datetime.datetime(2015, 5, 13, 0, 0),\n datetime.datetime(2015, 5, 12, 0, 0),\n datetime.datetime(2015, 5, 11, 0, 0),\n datetime.datetime(2015, 5, 10, 0, 0),\n datetime.datetime(2015, 5, 9, 0, 0),\n datetime.datetime(2015, 5, 8, 0, 0),\n datetime.datetime(2015, 5, 7, 0, 0),\n datetime.datetime(2015, 5, 6, 0, 0),\n datetime.datetime(2015, 5, 5, 0, 0),\n datetime.datetime(2015, 5, 4, 0, 0),\n datetime.datetime(2015, 5, 3, 0, 0),\n datetime.datetime(2015, 5, 2, 0, 0),\n datetime.datetime(2015, 5, 1, 0, 0),\n datetime.datetime(2015, 4, 30, 0, 0),\n datetime.datetime(2015, 4, 29, 0, 0),\n datetime.datetime(2015, 4, 28, 0, 0),\n datetime.datetime(2015, 4, 27, 0, 0),\n datetime.datetime(2015, 4, 26, 0, 0),\n datetime.datetime(2015, 4, 25, 0, 0),\n datetime.datetime(2015, 4, 24, 0, 0),\n datetime.datetime(2015, 4, 23, 0, 0),\n datetime.datetime(2015, 4, 22, 0, 0)]\n\ncommon\n~~~~~~\n\n**noise**\n\npossible to specify the gap between the actual time as noise parameters.\nallow to specify the noise parameters are \u201cdatetimes.generator\u201d and \u201cdatetimes.range\u201d functions.\nnoise-arguments must be specified in the kwargs format. and not required.\nthe available keys are same with timedelta-args. specifically, it is the following.\n\n- days\n- hours\n- minute\n- seconds\n- microseconds\n\n**argtype**\n\nacceptable argument as datetime other than datetime type are following.\n\n:int: it is processed as year.\n:str or unicode: create datetime object in the numeric part of string.\n:tuple: it is processed as (year, month, day)\n:dict: these items are processed as datetime arguments.\n:date: hour:minute:second is complemented with 00:00:00.\n\nhistory\n-------\n2.1.0\n~~~~~\n\n- added examples.\n\n - datetime utils.\n - nested object.\n\n- refectored.\n- replaced custom model argument.\n- swapped the order of the argument of custom model.\n\n - (index, key) to (key, index)", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/righ/tesdat", "keywords": "testdata,tesdata,fixtures,dummydata,daterange", "license": "Apache License 2.0", "maintainer": null, "maintainer_email": null, "name": "tesdat", "package_url": "https://pypi.org/project/tesdat/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/tesdat/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/righ/tesdat" }, "release_url": "https://pypi.org/project/tesdat/2.1.1/", "requires_dist": null, "requires_python": null, "summary": "tesdat is a package to generate testdata.", "version": "2.1.1" }, "last_serial": 1944344, "releases": { "1.3.0": [ { "comment_text": "", "digests": { "md5": "ec7bac678836fe5db3541b8e609574fa", "sha256": "aa5b5d617817d3e262a630623ab485c8514c952bad3410f3cf7fa4aaf5cb72a7" }, "downloads": -1, "filename": "tesdat-1.3.0.tar.gz", "has_sig": false, "md5_digest": "ec7bac678836fe5db3541b8e609574fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9671, "upload_time": "2014-11-01T03:43:40", "url": "https://files.pythonhosted.org/packages/0a/e5/95b742776068b8e5d10e90ccff0c82635dff0e8211c784e40f81b7435c81/tesdat-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "a92ce878ecedd9eb674cfae1e18b3b46", "sha256": "3a32554e90306e1e7e26a827c4305fbd0b360d23dede414f8ed2c7a45dea10a6" }, "downloads": -1, "filename": "tesdat-1.3.1.tar.gz", "has_sig": false, "md5_digest": "a92ce878ecedd9eb674cfae1e18b3b46", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7523, "upload_time": "2014-11-03T09:47:31", "url": "https://files.pythonhosted.org/packages/be/2c/554a8f691d3f7b34b7d1d637a75c047c305b4c4c5d402daf4111fab0400a/tesdat-1.3.1.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "b3e3f23252e6bbab8b31e8ecb4884b47", "sha256": "cbaa8ea5d7ba14e7004a78817e1bfbfe5574f2d0b8884ff634c67f03b1b606d7" }, "downloads": -1, "filename": "tesdat-1.4.0.tar.gz", "has_sig": false, "md5_digest": "b3e3f23252e6bbab8b31e8ecb4884b47", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8243, "upload_time": "2014-11-15T17:49:30", "url": "https://files.pythonhosted.org/packages/31/5f/9d6f608a6821817825e2034d720ecb26d079a74dd0bcc6ae13e8656eba19/tesdat-1.4.0.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "adba1d1cdab0544247008f02d9354e6f", "sha256": "aaab33821c3bc852708bb2db44feafc8acfe0cd3b1413805a50047eeea33f2fc" }, "downloads": -1, "filename": "tesdat-1.5.0.tar.gz", "has_sig": false, "md5_digest": "adba1d1cdab0544247008f02d9354e6f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8840, "upload_time": "2014-12-06T05:40:06", "url": "https://files.pythonhosted.org/packages/48/63/9075f72a0f1ab28b9d9343de91e53bf86ebc45d0ab52c1abdaabb24e5e04/tesdat-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "9a56f862726f55dae4712115741508ba", "sha256": "e4a58de9d5d2882d7dfff1d7cbb4020d3677723774bbb825522342aad357dfa8" }, "downloads": -1, "filename": "tesdat-1.5.1.tar.gz", "has_sig": false, "md5_digest": "9a56f862726f55dae4712115741508ba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8846, "upload_time": "2014-12-20T09:36:45", "url": "https://files.pythonhosted.org/packages/32/0c/71846da46d8f14e68581ab7c732e20f89f785f9216b3b05d366a07f418e7/tesdat-1.5.1.tar.gz" } ], "1.5.2": [ { "comment_text": "", "digests": { "md5": "ef407b1359203a49ed8de6c2f4871bd1", "sha256": "1c8903782a03096ee1ce40bc550163e82b67adb098a755a2aadcaadb038e1a78" }, "downloads": -1, "filename": "tesdat-1.5.2.tar.gz", "has_sig": false, "md5_digest": "ef407b1359203a49ed8de6c2f4871bd1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8850, "upload_time": "2014-12-28T10:46:29", "url": "https://files.pythonhosted.org/packages/65/9c/b4f63b8cd5af2ec28985df06a09e5edbc80a9aedf29e9b6772489f77a6cd/tesdat-1.5.2.tar.gz" } ], "1.5.3": [ { "comment_text": "", "digests": { "md5": "eea71dba1e9e22da5dfa154785f9e941", "sha256": "f48db4d580db407e10e1aa5e0f24aeddb3c6653c43836b2fc952bddd961a8a6b" }, "downloads": -1, "filename": "tesdat-1.5.3.tar.gz", "has_sig": false, "md5_digest": "eea71dba1e9e22da5dfa154785f9e941", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9184, "upload_time": "2015-01-03T12:39:08", "url": "https://files.pythonhosted.org/packages/19/84/fc2270c5fe9e7638f809e9d2862dd17062136f449e0454c50ce777934cc8/tesdat-1.5.3.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "4a67101009b73bc30b102ad324d278d8", "sha256": "93c87a5dbaab4bbd8e649c19886034d4f6cc9fc6449a3117c81c3ac9d000f6fb" }, "downloads": -1, "filename": "tesdat-1.6.0.tar.gz", "has_sig": false, "md5_digest": "4a67101009b73bc30b102ad324d278d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11428, "upload_time": "2015-01-23T08:13:55", "url": "https://files.pythonhosted.org/packages/e5/82/41915c62bf53a3d13f3b6e23b3f5e5301f05c033bc47dc2b69b6559ebec9/tesdat-1.6.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "289021f7cd1ec7038d1750877b8509fd", "sha256": "13a045798ac8b430cd32a01271491f5f9bdeefe569aa50e598c857446f0780d5" }, "downloads": -1, "filename": "tesdat-2.0.0.tar.gz", "has_sig": false, "md5_digest": "289021f7cd1ec7038d1750877b8509fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10838, "upload_time": "2015-06-28T16:24:06", "url": "https://files.pythonhosted.org/packages/0a/a8/2f3f04b0e1d765fd8cc45fad2b608e3badd6a7bf56e9ee5ec3bbf8d4da7b/tesdat-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "ad7f4266720a6aba9e5fceae88994728", "sha256": "99b7e52ddb30229b95da1c04f71773fb8e90c183fc5bfd172ae485ca1786dc2b" }, "downloads": -1, "filename": "tesdat-2.0.1.tar.gz", "has_sig": false, "md5_digest": "ad7f4266720a6aba9e5fceae88994728", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10699, "upload_time": "2015-06-29T15:24:42", "url": "https://files.pythonhosted.org/packages/0e/d3/98d80db89a9a27c396217d580018dc32acf5d6ee6be70e9d668e9d55421c/tesdat-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "1b498feebe12812b88aea59bb7ada7fb", "sha256": "d777df7ab42032fe9f263e7bb7453b7c50daf4923c150d1abcf3260cfaf651d7" }, "downloads": -1, "filename": "tesdat-2.0.2.tar.gz", "has_sig": false, "md5_digest": "1b498feebe12812b88aea59bb7ada7fb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10686, "upload_time": "2015-07-16T14:19:31", "url": "https://files.pythonhosted.org/packages/b2/3c/5fa292fcf730df524a20a9521a03474be7a273ffc95d58fac621892c32c2/tesdat-2.0.2.tar.gz" } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "2113c7294b3f39f9d123c3b57b5649be", "sha256": "681be3376415c98e21894bdc0c68e5800f2a1f6a5a8e592328f73eff3551a79a" }, "downloads": -1, "filename": "tesdat-2.0.3.tar.gz", "has_sig": false, "md5_digest": "2113c7294b3f39f9d123c3b57b5649be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10743, "upload_time": "2015-07-24T10:38:24", "url": "https://files.pythonhosted.org/packages/bd/9c/2280506bd6e03ba2f4aeae1ad1314f8cc9b5eed18290958c5d8d14dc00c4/tesdat-2.0.3.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "66c6135156efdcd7211a5a96065f86f0", "sha256": "269037963cf5776c8be6da8e356edfe91eb758aa047cffb23ce1a87383e0c408" }, "downloads": -1, "filename": "tesdat-2.1.0.tar.gz", "has_sig": false, "md5_digest": "66c6135156efdcd7211a5a96065f86f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13181, "upload_time": "2015-11-25T16:36:51", "url": "https://files.pythonhosted.org/packages/ee/39/7f445ad93385636d879a0edc5e985530c1b8ad657b7782e31e158023ed31/tesdat-2.1.0.tar.gz" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "6299cdf43324a93343f6cafd7bb9caa0", "sha256": "c8a7bc51910415edeb0eb53110d1cf27db3c430d90b0acbb8f625cb2c3bb8ac9" }, "downloads": -1, "filename": "tesdat-2.1.1.tar.gz", "has_sig": false, "md5_digest": "6299cdf43324a93343f6cafd7bb9caa0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13176, "upload_time": "2015-11-25T16:42:31", "url": "https://files.pythonhosted.org/packages/e7/e2/c17c0077438e9a58b67e52362ccafee9ace847f677617e5c8feedca4bf25/tesdat-2.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6299cdf43324a93343f6cafd7bb9caa0", "sha256": "c8a7bc51910415edeb0eb53110d1cf27db3c430d90b0acbb8f625cb2c3bb8ac9" }, "downloads": -1, "filename": "tesdat-2.1.1.tar.gz", "has_sig": false, "md5_digest": "6299cdf43324a93343f6cafd7bb9caa0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13176, "upload_time": "2015-11-25T16:42:31", "url": "https://files.pythonhosted.org/packages/e7/e2/c17c0077438e9a58b67e52362ccafee9ace847f677617e5c8feedca4bf25/tesdat-2.1.1.tar.gz" } ] }