Initial commit

Porting all the code from Qiita and extending the tests.
can the commit except? If so, then it would be useful to have this in a separate try/except so the error can be more appropriate. If not, then it should be placed in an `else` block