makes shitty data more fit (a smarter serializer)
Project description
MorPhit
Usage
>>> from morphit import Parser
>>> Parser([], '[1,2,3]')
[1, 2, 3]
pip install morphit
sudo -H pip install morphit
morphit is a no nonsense parser that takes a template for data and converts whatever you feed it into whatever you want it to be.
Do you have "My data is fucked"? If you find yourself saying any of the following, you may to be entitled to financial compensation.
- WTF half of these are strings instead of insert type here
- How do I even convert from insert type A to insert type B
- I have so much bad data I'm going to have to manually fix
- I have hundreds of if conditions to fix weird data
- How the hell am I supposed to fix the type of all these nested objects
- You're telling me this float is supposed to be a date?...
- You're telling me that I cant put a datetime object anywhere?
- I don't know how any of these strings became numbers but...
Features
- datetime serialization
>>> from datetime import date
>>> Parser(str, datetime(2018, 1, 31, 6, 17, 45, 547000))
"2018-01-31T06:17:45.547"
- deep serialization of dicts
- supports custom serializers using methods/lambda functions
- templated parsers
- nested templated parsers
Supported Conversions
- any -> list
- any -> object
- any -> tuple
- any -> type
- any -> str
- dict -> str[json]
- dict -> dict
- dict -> list
- dict -> tuple
- datetime -> str
- datetime -> str[json]
- datetime -> int
- datetime -> float
- datetime.time -> str
- datetime.date -> str
- float -> str
- float -> float
- float -> list
- float -> tuple
- float -> type
- float -> datetime
- int -> str
- int -> int
- int -> list
- int -> tuple
- int -> datetime
- int -> type
- list -> str[json]
- list -> list
- list -> tuple
- tuple -> str[json[list]]
- tuple -> list
- tuple -> tuple
- none -> str
- none -> bool
- none -> list
- none -> tuple
- str -> bool
- str -> datetime
- str -> dict
- str -> float
- str -> int
- str -> list
- str -> tuple
- str -> type
- str[iso8601] -> datetime
- str[iso8601] -> float
- str[unicode] -> any string conversions
- str[python] -> any string conversions
iso8601 a date string formatted to the iso8601 spec json a json encoded equivilent of the data unicode strings that get messed up with u' ex: "[u'this',u'that']" python strings that are weirdly single quoted ex: "['photo', 2, 'pic', 'pics']"
Installation
Test:
python setup.py test
Build: python3 setup.py build
Install: python3 setup.py install
Development
virtualenv --python=python3 venv
source ./venv/bin/activate
python setup.py easy_install
pip install -r requirements-dev.txt
python3 setup.py sdist bdist_wheel
twine upload dist/*
Roadmap
- Custom exceptions for bad casting (int/list/tuple -> dict)
- Add strict parameter that enables enforcement of keys and list/tuple length
- Add default parameter that remplaces None or non existing values with a specified default
- Add fallback parameter that accepts a value or a lambda function to replace the value
BUGS
Should output float
>>> Parser({'asdf':[1.0]}, {'asdf':1000})
{'asdf': [1000]}
Contributing
Read CONTRIBUTING_.
Make a PR and I'll give it a look
Odds are good / the goods are odd
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file morphit-1.0.2.tar.gz
.
File metadata
- Download URL: morphit-1.0.2.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 924b393d5da09a589123082a6e7433e7cee6d34fd5cef01cbbae1b7a2de858b7 |
|
MD5 | 3a0ed8f26f04d5d1fadce2053733a098 |
|
BLAKE2b-256 | c4f74b1895239f84368393c85ba4a91c0b3e0a7b436dca4d930dd47b832df007 |
Provenance
File details
Details for the file morphit-1.0.2-py3-none-any.whl
.
File metadata
- Download URL: morphit-1.0.2-py3-none-any.whl
- Upload date:
- Size: 4.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2923096d6d41eec56163c6f88803d39ce8ae3f6a5310a1d4c1937e69ccdb638e |
|
MD5 | dab315cd066a653ae510023ae9a488a7 |
|
BLAKE2b-256 | 55667caa19f8bd476c5392073b8ca5dec8d5df97ad26c054b639f029050017c5 |