{ "info": { "author": "Daniel Furtado", "author_email": "daniel@dfurtado.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only" ], "description": "[![Build Status](https://travis-ci.org/dfurtado/dataclass-csv.svg?branch=master)](https://travis-ci.org/dfurtado/dataclass-csv)\n[![pypi](https://img.shields.io/pypi/v/dataclass-csv.svg)](https://pypi.python.org/pypi/dataclass-csv)\n[![Downloads](https://pepy.tech/badge/dataclass-csv)](https://pepy.tech/project/dataclass-csv)\n\n\n\n# Dataclass CSV\n\nDataclass CSV makes working with CSV files easier and much better than working with Dicts. It uses Python's Dataclasses to store data of every row on the CSV file and also uses type annotations which enables proper type checking and validation.\n\n\n## Main features\n\n- Use `dataclasses` instead of dictionaries to represent the rows in the CSV file.\n- Take advantage of the `dataclass` properties type annotation. `DataclassReader` use the type annotation to perform validation of the data of the CSV file.\n- Automatic type conversion. `DataclassReader` supports `str`, `int`, `float`, `complex`, `datetime` and `bool`.\n- Helps you troubleshoot issues with the data in the CSV file. `DataclassReader` will show exactly in which line of the CSV file contain errors.\n- Extract only the data you need. It will only parse the properties defined in the `dataclass`\n- Familiar syntax. The `DataclassReader` is used almost the same way as the `DictReader` in the standard library.\n- It uses `dataclass` features that let you define metadata properties so the data can be parsed exactly the way you want.\n- Make the code cleaner. No more extra loops to convert data to the correct type, perform validation, set default values, the `DataclassReader` will do all this for you.\n\n\n## Installation\n\n```shell\npipenv install dataclass-csv\n```\n\n## Getting started\n\nFirst, add the necessary imports:\n\n```python\nfrom dataclasses import dataclass\n\nfrom dataclass_csv import DataclassReader\n```\n\nAssuming that we have a CSV file with the contents below:\n```text\nfirstname,email,age\nElsa,elsa@test.com, 11\nAstor,astor@test.com, 7\nEdit,edit@test.com, 3\nElla,ella@test.com, 2\n```\n\nLet's create a dataclass that will represent a row in the CSV file above:\n```python\n@dataclass\nclass User():\n firstname: str\n email: str\n age: int\n```\n\nThe dataclass `User` has 3 properties, `firstname` and `email` is of type `str` and `age` is of type `int`.\n\nTo load and read the contents of the CSV file we do the same thing as if we would be using the `DictReader` from the `csv` module in the Python's standard library. After opening the file we create an instance of the `DataclassReader` passing two arguments. The first is the `file` and the second is the dataclass that we wish to use to represent the data of every row of the CSV file. Like so:\n\n```python\nwith open(filename) as users_csv:\n reader = DataclassReader(users_csv, User)\n for row in reader:\n print(row)\n```\n\nThe `DataclassReader` internally uses the `DictReader` from the `csv` module to read the CSV file which means that you can pass the same arguments that you would pass to the `DictReader`. The complete argument list is shown below:\n\n```python\ndataclass_csv.DataclassReader(\n f,\n cls,\n fieldnames=None,\n restkey=None,\n restval=None,\n dialect='excel',\n *args,\n **kwds\n)\n```\n\nIf you run this code you should see an output like this:\n\n```python\nUser(firstname='Elsa', email='elsa@test.com', age=11)\nUser(firstname='Astor', email='astor@test.com', age=7)\nUser(firstname='Edit', email='edit@test.com', age=3)\nUser(firstname='Ella', email='ella@test.com', age=2)\n```\n\n## Error handling\n\nOne of the advantages of using the `DataclassReader` is that it makes it easy to detect when the type of data in the CSV file is not what your application's model is expecting. And, the `DataclassReader` shows errors that will help to identify the rows with problem in your CSV file.\n\nFor example, say we change the contents of the CSV file shown in the **Getting started** section and, modify the `age` of the user Astor, let's change it to a string value:\n\n```text\nAstor, astor@test.com, test\n```\n\nRemember that in the dataclass `User` the `age` property is annotated with `int`. If we run the code again an exception will be raised with the message below:\n\n```text\ndataclass_csv.exceptions.CsvValueError: The field `age` is defined as but\nreceived a value of type . [CSV Line number: 3]\n```\n\nNote that apart from telling what the error was, the `DataclassReader` will also show which line of the CSV file contain the data with errors.\n\n## Default values\n\nThe `DataclassReader` also handles properties with default values. Let's modify the dataclass `User` and add a default value for the field `email`:\n\n```python\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass User():\n firstname: str\n email: str = 'Not specified'\n age: int\n```\n\nAnd we modify the CSV file and remove the email for the user Astor:\n\n```python\nAstor,, 7\n```\n\nIf we run the code we should see the output below:\n\n```text\nUser(firstname='Elsa', email='elsa@test.com', age=11)\nUser(firstname='Astor', email='Not specified', age=7)\nUser(firstname='Edit', email='edit@test.com', age=3)\nUser(firstname='Ella', email='ella@test.com', age=2)\n```\n\nNote that now the object for the user Astor have the default value `Not specified` assigned to the email property.\n\nDefault values can also be set using `dataclasses.field` like so:\n\n```python\nfrom dataclasses import dataclass, field\n\n\n@dataclass\nclass User():\n firstname: str\n email: str = field(default='Not specified')\n age: int\n```\n\n## Mapping dataclass fields to columns\n\nThe mapping between a dataclass property and a column in the CSV file will be done automatically if the names match, however, there are situations that the name of the header for a column is different. We can easily tell the `DataclassReader` how the mapping should be done using the method `map`. Assuming that we have a CSV file with the contents below:\n\n```text\nFirst Name,email,age\nElsa,elsa@test.com, 11\n```\n\nNote that now, the column is called **First Name** and not **firstname**\n\nAnd we can use the method `map`, like so:\n\n```python\nreader = DataclassReader(users_csv, User)\nreader.map('First name').to('firstname')\n```\n\nNow the DataclassReader will know how to extract the data from the column **First Name** and add it to the to dataclass property **firstname**\n\n## Supported type annotation\n\nAt the moment the `DataclassReader` support `int`, `str`, `float`, `complex`, `datetime`, and `bool`. When defining a `datetime` property, it is necessary to use the `dateformat` decorator, for example:\n\n```python\nfrom dataclasses import dataclass\nfrom datetime import datetime\n\nfrom dataclass_csv import DataclassReader, dateformat\n\n\n@dataclass\n@dateformat('%Y/%m/%d')\nclass User:\n name: str\n email: str\n birthday: datetime\n\n\nif __name__ == '__main__':\n\n with open('users.csv') as f:\n reader = DataclassReader(f, User)\n for row in reader:\n print(row)\n```\n\nAssuming that the CSV file have the following contents:\n\n```text\nname,email,birthday\nEdit,edit@test.com,2018/11/23\n```\n\nThe output would look like this:\n\n```text\nUser(name='Edit', email='edit@test.com', birthday=datetime.datetime(2018, 11, 23, 0, 0))\n```\n\n## Fields metadata\n\nIt is important to note that the `dateformat` decorator will define the date format that will be used to parse date to all properties\nin the class. Now there are situations where the data in a CSV file contains two or more columns with date values in different formats. It is possible\nto set a format specific for every property using the `dataclasses.field`. Let's say that we now have a CSV file with the following contents:\n\n```text\nname,email,birthday, create_date\nEdit,edit@test.com,2018/11/23,2018/11/23 10:43\n```\n\nAs you can see the `create_date` contains time information as well.\n\nThe `dataclass` User can be defined like this:\n\n```python\nfrom dataclasses import dataclass, field\nfrom datetime import datetime\n\nfrom dataclass_csv import DataclassReader, dateformat\n\n\n@dataclass\n@dateformat('%Y/%m/%d')\nclass User:\n name: str\n email: str\n birthday: datetime\n create_date: datetime = field(metadata={'dateformat': '%Y/%m/%d %H:%M'})\n```\n\nNote that the format for the `birthday` field was not speficied using the `field` metadata. In this case the format specified in the `dateformat`\ndecorator will be used.\n\n## Handling values with empty spaces\n\nWhen defining a property of type `str` in the `dataclass`, the `DataclassReader` will treat values with only white spaces as invalid. To change this\nbehavior, there is a decorator called `@accept_whitespaces`. When decorating the class with the `@accept_whitespaces` all the properties in the class\nwill accept values with only white spaces.\n\nFor example:\n\n```python\nfrom dataclass_csv import DataclassReader, accept_whitespaces\n\n@accept_whitespaces\n@dataclass\nclass User:\n name: str\n email: str\n birthday: datetime\n created_at: datetime\n```\n\nIf you need a specific field to accept white spaces, you can set the property `accept_whitespaces` in the field's metadata, like so:\n\n```python\n@dataclass\nclass User:\n name: str\n email: str = field(metadata={'accept_whitespaces': True})\n birthday: datetime\n created_at: datetime\n```\n\n## Copyright and License\n\nCopyright (c) 2018 Daniel Furtado. Code released under BSD 3-clause license\n\n## Credits\n\nThis package was created with [Cookiecutter](https://github.com/audreyr/cookiecutter) and the [audreyr/cookiecutter-pypackage](https://github.com/audreyr/cookiecutter-pypackage) project template.\n\n\n# History\n\n### 0.1.0 (2018-11-25)\n\n* First release on PyPI.\n\n### 0.1.1 (2018-11-25)\n\n* Documentation fixes.\n\n### 0.1.2 (2018-11-25)\n\n* Documentation fixes.\n\n### 0.1.3 (2018-11-26)\n\n* Bug fixes\n* Removed the requirement of setting the dataclass init to `True`\n\n### 0.1.5 (2018-11-29)\n\n* Support for parsing datetime values.\n* Better handling when default values are set to `None`\n\n### 0.1.6 (2018-12-01)\n\n* Added support for reader default values from the default property of the `dataclasses.field`.\n* Added support for allowing string values with only white spaces in a class level using the `@accept_whitespaces` decorator or through the `dataclasses.field` metadata.\n* Added support for specifying date format using the `dataclasses.field` metadata.\n\n### 0.1.7 (2018-12-01)\n\n* Added support for default values from `default_factory` in the field's metadata. This allows adding mutable default values to the dataclass properties.\n\n### 1.0.0 (2018-12-16)\n\n* When a data does not pass validation it shows the line number in the CSV file where the data contain errors.\n* Improved error handling.\n* Changed the usage of the `@accept_whitespaces` decorator.\n* Updated documentation.\n\n### 1.0.1 (2019-01-29)\n\n* Fixed issue when parsing headers on a CSV file with trailing white spaces.\n\n### 1.1.0 (2019-02-17)\n\n* Added support for boolean values.\n* Docstrings\n\n### 1.1.1 (2019-02-17)\n\n* Documentation fixes.\n\n### 1.1.2 (2019-02-17)\n\n* Documentation fixes.\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://github.com/dfurtado/dataclass-csv", "keywords": "dataclass dataclasses csv dataclass-csv", "license": "BSD license", "maintainer": "", "maintainer_email": "", "name": "dataclass-csv", "package_url": "https://pypi.org/project/dataclass-csv/", "platform": "", "project_url": "https://pypi.org/project/dataclass-csv/", "project_urls": { "Homepage": "https://github.com/dfurtado/dataclass-csv" }, "release_url": "https://pypi.org/project/dataclass-csv/1.1.2/", "requires_dist": null, "requires_python": "", "summary": "Map CSV data into dataclasses", "version": "1.1.2" }, "last_serial": 4832081, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "ec1c6718f9081bc09f71abbf0a0765fa", "sha256": "ff08d124c87df08259bb613037c11e01670768407fb37f837992ec7743747f9a" }, "downloads": -1, "filename": "dataclass_csv-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ec1c6718f9081bc09f71abbf0a0765fa", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7468, "upload_time": "2018-11-25T17:20:57", "url": "https://files.pythonhosted.org/packages/26/a1/c0c708fc2404249034bfd11deac980442b629110087e8510d98772aeee02/dataclass_csv-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e93ad5d2a9e2c6c589c098be80b9c3b0", "sha256": "a7a29ec7171e6bd41958ccba61c2c31963c11526c28186ca0646de70480a54ba" }, "downloads": -1, "filename": "dataclass-csv-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e93ad5d2a9e2c6c589c098be80b9c3b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6842, "upload_time": "2018-11-25T17:20:59", "url": "https://files.pythonhosted.org/packages/f6/38/def8f6b4979831850acd21d8c5bde82ac2556c9cfe23ccaac4e9104446df/dataclass-csv-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "61c28842f19e92e0f2aa52821ac9e2ef", "sha256": "44ea9affa8e490f15e6e4768255ddd100b2f8d694e76afa19bf8558a3fb24144" }, "downloads": -1, "filename": "dataclass_csv-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "61c28842f19e92e0f2aa52821ac9e2ef", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7502, "upload_time": "2018-11-25T17:31:11", "url": "https://files.pythonhosted.org/packages/e4/d4/fff88b3b62fbdf105fe9e59bfe3940c0d512c7a3d9f1402a6138a87d00ee/dataclass_csv-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6c1d5dadfb0b05c524ccd88414ceed2d", "sha256": "dcb1986533c1c669bed2157af55ff2e30d3f3517c8ae0cfdab0245751c913399" }, "downloads": -1, "filename": "dataclass-csv-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6c1d5dadfb0b05c524ccd88414ceed2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6860, "upload_time": "2018-11-25T17:31:13", "url": "https://files.pythonhosted.org/packages/e3/32/c318a1afb5a93bc4aee18bceead2c642282d3e4e565630088e806f677143/dataclass-csv-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "571a675c75e46abd5f3cc0c6510558df", "sha256": "b38d0871d914fff578cdf0ee27f29d1363de8ae8b901b3fd9ed86ed24e31090b" }, "downloads": -1, "filename": "dataclass_csv-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "571a675c75e46abd5f3cc0c6510558df", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5982, "upload_time": "2018-11-25T17:40:51", "url": "https://files.pythonhosted.org/packages/98/34/5c972b6a0e168cd42f6634e67875bc044af8201b9e0feacb6dd60e1241f6/dataclass_csv-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5cbd539ed1527b3653bd8b36ecf50f1c", "sha256": "832a520e275c01a6a8ac350bc6ad562f831d4afed283cccc123f23d0b66b35df" }, "downloads": -1, "filename": "dataclass-csv-0.1.2.tar.gz", "has_sig": false, "md5_digest": "5cbd539ed1527b3653bd8b36ecf50f1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6897, "upload_time": "2018-11-25T17:40:52", "url": "https://files.pythonhosted.org/packages/fc/c0/e25da58ecb0fbe4591c9897c03e79355a43b49d3bc0e2567ecdb1de33f9c/dataclass-csv-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "4d95c02101ae8d6176972f423c168cc7", "sha256": "1af5d7400f1bbc7f66c210a7a3489f4713633a8f054ad6c514597392f7553b56" }, "downloads": -1, "filename": "dataclass_csv-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4d95c02101ae8d6176972f423c168cc7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5914, "upload_time": "2018-11-26T22:26:32", "url": "https://files.pythonhosted.org/packages/12/4c/1e7c739a6ce8e816d08854dfa0d389634a019a669ece542594c38518cfc4/dataclass_csv-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c32a6d6c087b27ad3bd3dfc7b1c0f53", "sha256": "72e400c129a903ab994362f1bbdbc2df42bc71a01389ec32b4c0b3363a595f66" }, "downloads": -1, "filename": "dataclass-csv-0.1.3.tar.gz", "has_sig": false, "md5_digest": "7c32a6d6c087b27ad3bd3dfc7b1c0f53", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6842, "upload_time": "2018-11-26T22:26:33", "url": "https://files.pythonhosted.org/packages/70/cb/bc608abdd051d5496683c91d843979353785a50b819cde882bd2b5720414/dataclass-csv-0.1.3.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "6e290687abd6314591402e5a0817cf9a", "sha256": "78718ff1613015686c479723e69207342e3e5b8657852c02bb4083b17ad4b2ee" }, "downloads": -1, "filename": "dataclass_csv-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6e290687abd6314591402e5a0817cf9a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7085, "upload_time": "2018-11-29T21:32:57", "url": "https://files.pythonhosted.org/packages/b4/c3/e4187c62e7d34c3a77a92998e11158455f04df9e887e9d8735b6a434cb8d/dataclass_csv-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27e53bc120787e74ec8828565f9e9939", "sha256": "e08a7e76cbd6a55d280192244e0be774e1697282770e2005a3c9a6132abe3008" }, "downloads": -1, "filename": "dataclass-csv-0.1.5.tar.gz", "has_sig": false, "md5_digest": "27e53bc120787e74ec8828565f9e9939", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7664, "upload_time": "2018-11-29T21:32:58", "url": "https://files.pythonhosted.org/packages/17/53/a89e6e0c7f7359c9a5205abace7ba3f4ab06e5252aa3b54f8b594a82619b/dataclass-csv-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "65dbbc9a01f6550568f2921ff943a9b9", "sha256": "159b040512f723914efdaa0d551eb006d160e4045e88570612e798bbf602cab4" }, "downloads": -1, "filename": "dataclass_csv-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "65dbbc9a01f6550568f2921ff943a9b9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7656, "upload_time": "2018-12-01T10:40:07", "url": "https://files.pythonhosted.org/packages/e3/15/9ab35f41f0a4c0ef0b2774d81508875aac7ed170d0e43b6ecf5e1f9e1319/dataclass_csv-0.1.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5202b548d2fda8c43a12a6b91358dbdb", "sha256": "1504e50bdd7c7469534c255f6f51fc04538ff3a5f20190ad2a197952aa72b886" }, "downloads": -1, "filename": "dataclass-csv-0.1.6.tar.gz", "has_sig": false, "md5_digest": "5202b548d2fda8c43a12a6b91358dbdb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8496, "upload_time": "2018-12-01T10:40:09", "url": "https://files.pythonhosted.org/packages/e1/cb/d8d895b245d721596633b901715af11e4db30a51b3d13d1e54dc24d951f1/dataclass-csv-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "9b50a99a1ca29f62f7b48ed12b638cea", "sha256": "53ecfbe87a2a4c6159f58ecf29a9c4e629c72a1151cc097087a1426e7f7819b7" }, "downloads": -1, "filename": "dataclass_csv-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9b50a99a1ca29f62f7b48ed12b638cea", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7827, "upload_time": "2018-12-02T17:58:12", "url": "https://files.pythonhosted.org/packages/60/9b/79e27c884bdacfad053b561a9a873eeb7c4c25272b2951fd24cec230ffb4/dataclass_csv-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a40bbd051aed7f491db846a643f73dd7", "sha256": "f41107e4231b021c65cd7a045ec414f2349619a75b5c93a9983b2661a6f275e2" }, "downloads": -1, "filename": "dataclass-csv-0.1.7.tar.gz", "has_sig": false, "md5_digest": "a40bbd051aed7f491db846a643f73dd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8682, "upload_time": "2018-12-02T17:58:14", "url": "https://files.pythonhosted.org/packages/8f/5a/c47da7f7613c309e5b7def9bcfcfac9ae6e09cb05b57fa080b8327c5dd8c/dataclass-csv-0.1.7.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "472dede65ee00ca6be0e21fd48d1cd43", "sha256": "d0ddaee0db0d25688d5d8633b56860af3b8b0ddb1a8478e3ba9d2d7002f2616a" }, "downloads": -1, "filename": "dataclass_csv-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "472dede65ee00ca6be0e21fd48d1cd43", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8957, "upload_time": "2018-12-16T16:29:05", "url": "https://files.pythonhosted.org/packages/02/ba/7dea424f0e100919838f2eef21aba93e1be6cb8ebc5f61dc0cc574ecc465/dataclass_csv-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a4204f15d00def8fa04717c8e1fbbf59", "sha256": "607d13769e747efff8e7da241da01a7a4e90db89553bcdd21467cd6c5c4a8ad2" }, "downloads": -1, "filename": "dataclass-csv-1.0.0.tar.gz", "has_sig": false, "md5_digest": "a4204f15d00def8fa04717c8e1fbbf59", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12207, "upload_time": "2018-12-16T16:29:07", "url": "https://files.pythonhosted.org/packages/1c/3f/01825f8927d58c6d243073991b5ed96db6fbc819c5902f3e822987083a38/dataclass-csv-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "f48703c0e35ea68913d9e0518b6e4802", "sha256": "6622efae5524ef0f9f4f7f64b18ac22d046284e53e4e1bbbae458930429d04c8" }, "downloads": -1, "filename": "dataclass_csv-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f48703c0e35ea68913d9e0518b6e4802", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9064, "upload_time": "2019-01-24T21:38:41", "url": "https://files.pythonhosted.org/packages/81/4b/d316cc611350f7749e500a529eefb36c0b5e8759e8ee2a599e1cc5bd3d2d/dataclass_csv-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36807b52664b4b27119886200b0de969", "sha256": "ac8aeba9c67c4d81d52c7ac91f46ec9bb667c4b9a88e763680263ab20de1724e" }, "downloads": -1, "filename": "dataclass-csv-1.0.1.tar.gz", "has_sig": false, "md5_digest": "36807b52664b4b27119886200b0de969", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12544, "upload_time": "2019-01-24T21:38:43", "url": "https://files.pythonhosted.org/packages/6f/35/664c40f9e9ff8ce6f1e2ed5e9cb2798a833035a729a3539825606a0775b3/dataclass-csv-1.0.1.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "1aa63213dd1a54255619f7ca1a301186", "sha256": "d03298571e024ad60983a20cb4d139443b4ecb80500e0ac24e10939cc57789c7" }, "downloads": -1, "filename": "dataclass_csv-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1aa63213dd1a54255619f7ca1a301186", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10004, "upload_time": "2019-02-17T18:16:38", "url": "https://files.pythonhosted.org/packages/26/62/111eeca4ec8ae756bb31d6397892623f6048816b371360cc8aaaa67c9f51/dataclass_csv-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fd0b15ccb544069ed3846cacf8ac00ae", "sha256": "1fd1b315f3777a7072183794786963440195c7692a107f95ec135f5255077651" }, "downloads": -1, "filename": "dataclass-csv-1.1.0.tar.gz", "has_sig": false, "md5_digest": "fd0b15ccb544069ed3846cacf8ac00ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13375, "upload_time": "2019-02-17T18:16:40", "url": "https://files.pythonhosted.org/packages/d5/5d/878a7b4871ccb208ce4714b0f61bed78795f469ce3f80557c3400660ef16/dataclass-csv-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "165cef7c73f50936004c5728fac10caa", "sha256": "395fea506d1a6f96cb5129e7bc840960fd06cef517c0ad3798a6f32049a53a94" }, "downloads": -1, "filename": "dataclass_csv-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "165cef7c73f50936004c5728fac10caa", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10008, "upload_time": "2019-02-17T18:21:53", "url": "https://files.pythonhosted.org/packages/be/41/ff0ab1b51afcd25e6baf5a144ca094036287b70b195a9cc807eceef8d3e7/dataclass_csv-1.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "43eccc7126a5c8046f8f1c2e4a42acc8", "sha256": "0857aad3d574a189e35832591a0107c3717351fd885aa7ff29c95581e1dde0c1" }, "downloads": -1, "filename": "dataclass-csv-1.1.1.tar.gz", "has_sig": false, "md5_digest": "43eccc7126a5c8046f8f1c2e4a42acc8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13399, "upload_time": "2019-02-17T18:21:54", "url": "https://files.pythonhosted.org/packages/f0/32/304d9646bf3a1bb842cc5fb38df2c20ffc23924acf6447636f48391b438e/dataclass-csv-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "e6890c902562481854f3f7a4c9278e53", "sha256": "72f07da7b8302bc3a692ffe1f448440f0bfcd77f2561e50b0b488e01cd6b7dad" }, "downloads": -1, "filename": "dataclass_csv-1.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e6890c902562481854f3f7a4c9278e53", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10019, "upload_time": "2019-02-17T18:24:55", "url": "https://files.pythonhosted.org/packages/51/f6/af5a803c1b788aca76f6d978b7219b994f0de068427ca2ca8f2bfe3b5bee/dataclass_csv-1.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a690f4c06eae21b8626abbe7fe00027", "sha256": "28d8cbcf384eca42b125bcedf2c39d78f0217e0db86290d41ffbc7b06edbef80" }, "downloads": -1, "filename": "dataclass-csv-1.1.2.tar.gz", "has_sig": false, "md5_digest": "8a690f4c06eae21b8626abbe7fe00027", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13418, "upload_time": "2019-02-17T18:24:57", "url": "https://files.pythonhosted.org/packages/03/14/3a68215b1e6b90498e0cc33ee1fcbce4b72e583a54dc3cd575f094746aad/dataclass-csv-1.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e6890c902562481854f3f7a4c9278e53", "sha256": "72f07da7b8302bc3a692ffe1f448440f0bfcd77f2561e50b0b488e01cd6b7dad" }, "downloads": -1, "filename": "dataclass_csv-1.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e6890c902562481854f3f7a4c9278e53", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10019, "upload_time": "2019-02-17T18:24:55", "url": "https://files.pythonhosted.org/packages/51/f6/af5a803c1b788aca76f6d978b7219b994f0de068427ca2ca8f2bfe3b5bee/dataclass_csv-1.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a690f4c06eae21b8626abbe7fe00027", "sha256": "28d8cbcf384eca42b125bcedf2c39d78f0217e0db86290d41ffbc7b06edbef80" }, "downloads": -1, "filename": "dataclass-csv-1.1.2.tar.gz", "has_sig": false, "md5_digest": "8a690f4c06eae21b8626abbe7fe00027", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13418, "upload_time": "2019-02-17T18:24:57", "url": "https://files.pythonhosted.org/packages/03/14/3a68215b1e6b90498e0cc33ee1fcbce4b72e583a54dc3cd575f094746aad/dataclass-csv-1.1.2.tar.gz" } ] }