Skip to main content

Mixin which converts ``data class instance`` and others each other more simple.

Project description

pypi Documentation Status Build Status Test Coverage Code Climate versions license

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.
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

  • Documentation Status for master

  • Documentation Status for current stable version

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

If you're not sure about the file name format, learn more about wheel file names.

owlmixin-1.0.0rc14-py2.py3-none-any.whl (14.1 kB view details)

Uploaded Python 2Python 3

File details

Details for the file owlmixin-1.0.0rc14-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for owlmixin-1.0.0rc14-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 cf44889d2a128ddbb818843998a680b23898a42a0ad02fe7f56c03927260fc9a
MD5 ed7b1e69653c462383890bf7930cb99a
BLAKE2b-256 c4c1ad58a7deabb8f33fa11aeb5c930eef79397c22be08194acb1024b0f984ea

See more details on using hashes here.

Supported by

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