Skip to main content

Validation and parsing library

Project description

Trafaret
========

-----

|circleci_build| |pypi_version| |pypi_license|

-----


Read The Docs hosted documentation <http://trafaret.readthedocs.org/en/latest/>
or look to the docs/api/intro.rst for start.

Trafaret is rigid and powerful lib to work with foreign data, configs etc.
It provides simple way to check anything, and convert it accordingly to your needs.

It have shortcut syntax and ability to express anything that you can code:

.. code-block:: python

>>> from trafaret.constructor import construct
>>> validator = construct({'a': int, 'b': [str]})
>>> validator({'a': 5, 'b': ['lorem', 'ipsum']})
{'a': 5, 'b': ['lorem', 'ipsum']}

>>> validator({'a': 5, 'b': ['gorky', 9]})
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/mkrivushin/w/trafaret/trafaret/__init__.py", line 204, in __call__
return self.check(val)
File "/Users/mkrivushin/w/trafaret/trafaret/__init__.py", line 144, in check
return self._convert(self.check_and_return(value))
File "/Users/mkrivushin/w/trafaret/trafaret/__init__.py", line 1105, in check_and_return
raise DataError(error=errors, trafaret=self)
trafaret.DataError: {'b': DataError({1: DataError(value is not a string)})}

For simple example what can be done:

.. code-block:: python

import datetime
import trafaret as t

date = t.Dict(year=t.Int, month=t.Int, day=t.Int) >> (lambda d: datetime.datetime(**d))
assert date.check({'year': 2012, 'month': 1, 'day': 12}) == datetime.datetime(2012, 1, 12)

Work with regex:

.. code-block:: python

>>> c = t.String(regex=r'^name=(\w+)$') >> (lambda m: m.groups()[0])
>>> c.check('name=Jeff')
'Jeff'

Rename dict keys:

.. code-block:: python

>>> c = t.Dict(t.Key('uNJ') >> 'user_name': t.String})
>>> c.check({'uNJ': 'Adam'})
{'user_name': 'Adam'}

``Arrow`` date checking:

.. code-block:: python

import arrow

def check_datetime(str):
try:
return arrow.get(str).naive
except arrow.parser.ParserError:
return t.DataError('value is not in proper date/time format')

Yes, you can write trafarets that simple.


.. |circleci_build| image:: https://circleci.com/gh/Deepwalker/trafaret.svg?style=shield
:target: https://circleci.com/gh/Deepwalker/trafaret
:alt: Build status

.. |pypi_version| image:: https://img.shields.io/pypi/v/trafaret.svg?style=flat-square
:target: https://pypi-hypernode.com/pypi/trafaret
:alt: Downloads

.. |pypi_license| image:: https://img.shields.io/pypi/l/trafaret.svg?style=flat-square
:target: https://pypi-hypernode.com/pypi/trafaret
:alt: Downloads

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trafaret-0.9.0.tar.gz (19.6 kB view details)

Uploaded Source

Built Distribution

trafaret-0.9.0-py3-none-any.whl (21.7 kB view details)

Uploaded Python 3

File details

Details for the file trafaret-0.9.0.tar.gz.

File metadata

  • Download URL: trafaret-0.9.0.tar.gz
  • Upload date:
  • Size: 19.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for trafaret-0.9.0.tar.gz
Algorithm Hash digest
SHA256 08322743a5df129fecff68dc177b8c44728c3bef7107a5dd1a27db2affa78982
MD5 0c55d1d4de32a4bdfd990e74720c6a0b
BLAKE2b-256 c90ca06fc85c946caf8bde4303a213e8aef1c838b9a4bb566c6f6ccc05968756

See more details on using hashes here.

File details

Details for the file trafaret-0.9.0-py3-none-any.whl.

File metadata

File hashes

Hashes for trafaret-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4e8b4b318f0ee5c6e03d96854a5b951a1546449c8c490b38748d06e7d41a66fe
MD5 092def1904f1d3693750ee33fae5d8bf
BLAKE2b-256 b2b94f38f88ad985607a6a35e28a573fdf95e98d74e3f8bddf31d3ecec3495f6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page