Mixin which converts ``data class instance`` and others each other more simple.
Project description
Mixin which converts data class instance and others each other more simple.
Motivation
Have you ever wanted to write robust code in Python? This library will make such your wishes come true.
Define your data class which is extend OwlMixin, you can use some useful methods which help your codes robust. See following Example and API Reference sections.
Installation
pip install owlmixin
Example
You don’t need to use typing necessarily, but I recommend to use this to make your codes more robust.
See PEP 484 – Type Hints.
from typing import Text, Optional
from owlmixin import OwlMixin
from owlmixin.owlcollections import TList
class Food(OwlMixin):
def __init__(self, id, name, color=None):
self.id = id # type: Text
self.name = name # type: Text
self.color = color # type: Optional[Text]
class Human(OwlMixin):
def __init__(self, id, name, favorite):
self.id = id # type: Text
self.name = name # type: Text
self.favorite = Food.from_dicts(favorite) # type: TList[Food]
jiro = Human.from_dict({
"id": 10,
"name": "jiro",
"favorite": [
{"id": 1, "name": "apple"},
{"id": 2, "name": "orange", "color": "white"}
]
})
>>> jiro.id
10
>>> jiro.name
'jiro'
>>> print(jiro.favorite[0].to_pretty_json())
{
"id": 1,
"name": "apple"
}
>>> print(jiro.to_dict())
{'name': 'jiro', 'id': 10, 'favorite': [{'name': 'apple', 'id': 1}, {'name': 'orange', 'id': 2, 'color': 'white'}]}
>>> print(jiro.to_dict(ignore_none=False))
{'name': 'jiro', 'id': 10, 'favorite': [{'name': 'apple', 'id': 1, 'color': None}, {'name': 'orange', 'id': 2, 'color': 'white'}]}
You can also use methods chains as following.
from typing import Optional
from owlmixin import OwlMixin
from owlmixin.owlcollections import TList
# `**extra` is necessary to allow extra elements.
# Note that you must define all properties in github response json if you don't use `**extra`
class Repository(OwlMixin):
def __init__(self, id, name, description, stargazers_count, **extra):
self.id = id # type: int
self.name = name # type: Text
self.description = description # type: Optional[Text]
self.star_count = stargazers_count # type: int
class GithubRepository(OwlMixin):
def __init__(self, total_count, incomplete_results, items):
self.total_count = total_count # type: int
self.incomplete_results = incomplete_results # type: bool
self.repositories = Repository.from_dicts(items) # type: TList[Repository]
>>> r = GithubRepository \
... .from_json_url("https://api.github.com/search/repositories?q=git") \
... .repositories \
... .filter(lambda x: x.star_count > 100) \
... .order_by(lambda x: x.star_count, True) \
... .map(lambda x: {
... "id": x.id,
... "message": '★{0.star_count} {0.name}'.format(x)
... }) \
... .to_csv(fieldnames=["id", "message"], with_header=True)
>>> print(r)
id,message
1062897,★46515 gitignore
16752620,★17762 gogs
36502,★16272 git
401025,★9879 hub
817345,★9542 git-extras
9350746,★6178 gitbucket
901662,★5962 libgit2
3721219,★4666 githug
16899487,★4560 gitql
1951148,★4318 legit
13021798,★4307 git-lfs
8310356,★4074 vim-gitgutter
140656,★3956 tig
2499845,★3757 lolcommits
33088032,★3489 git-style-guide
7266492,★2889 bfg-repo-cleaner
43998576,★2653 git-recipes
655492,★2453 magit
21125024,★2144 husky
85953,★1995 gitextensions
15400220,★1785 progit2
43623432,★1553 git-fire
22106110,★1380 git-cheat-sheet
44739044,★1127 go-git
15342073,★986 training-kit
58859,★858 gitosis
63418718,★561 git-tips
15783450,★404 patchwork
18484639,★216 git
3720815,★101 git
API Reference
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 Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
Close
Hashes for owlmixin-1.0.0rc14-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cf44889d2a128ddbb818843998a680b23898a42a0ad02fe7f56c03927260fc9a |
|
MD5 | ed7b1e69653c462383890bf7930cb99a |
|
BLAKE2b-256 | c4c1ad58a7deabb8f33fa11aeb5c930eef79397c22be08194acb1024b0f984ea |