Skip to main content

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

Project description


Actions Status coverage complexity license pypi versions

(゚∀゚) v5.0 have breaking changes

  • TIterator#group_by
    • Return TDict[TList[T]] instead of TDict[TIterator[T]]

(゚∀゚) v4.0 have breaking changes

  • OwlMixin
    • Must use keyword arguments in from_XXX and to_XXX except for some ones
    • from_csvf -> from_csvf_to_list
  • TList
    • head -> take
    • partial -> partition (switch left and right)
  • transformers.XXX
    • Must use keyword arguments in
      • to_dict
      • to_dicts
      • to_json
      • to_jsonf
      • to_yaml
      • to_yamlf
      • to_csv
      • to_csvf


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.


pip install owlmixin

API Reference


from owlmixin import OwlMixin, OwlEnum, TOption, TList

class Color(OwlEnum):
    RED = "red"
    GREEN = "green"
    BLUE = "blue"

class Food(OwlMixin):
    id: int
    name: str
    color: TOption[Color]

class Human(OwlMixin):
    id: int
    name: str
    favorite: TList[Food]

jiro = Human.from_dict({
    "id": 10,
    "name": "jiro",
    "favorite": [
        {"id": 1, "name": "apple"},
        {"id": 2, "name": "orange", "color": "green"}



>>> print(jiro.to_dict())
{'id': 10, 'name': 'jiro', 'favorite': [{'id': 1, 'name': 'apple'}, {'id': 2, 'name': 'orange', 'color': 'green'}]}

>>> print(jiro.favorite[0].to_pretty_json())
    "id": 1,
    "name": "apple"

>>> print(jiro.to_yaml())
  - id: 1
    name: apple
  - color: green
    id: 2
    name: orange
id: 10
name: jiro

>>> print(jiro.favorite.to_csv(['id', 'name', 'color'], with_header=True))

You can also use methods chains as following.

from owlmixin import OwlMixin, TOption, TIterator

class Repository(OwlMixin):
    id: int
    name: str
    description: TOption[str]
    stargazers_count: int

class GithubRepository(OwlMixin):
    total_count: int
    incomplete_results: bool
    items: TIterator[Repository]


>>> print(
...     GithubRepository
...         .from_json_url("")
...         .items
...         .filter(lambda x: x.stargazers_count > 100)
...         .order_by(lambda x: x.stargazers_count, True)
...         .take(5)
...         .emap(lambda v, i: {
...             'RANK': i+1,
...             'STAR': v.stargazers_count,
...             'NAME':,
...             'DESCRIPTION': v.description
...         })
...         .to_csv(fieldnames=["RANK", "STAR", "NAME", "DESCRIPTION"], with_header=True)
... )
1,84643,gitignore,A collection of useful .gitignore templates
2,30456,gogs,Gogs is a painless self-hosted Git service.
3,29908,git-flight-rules,Flight rules for git
4,27704,git,Git Source Code Mirror - This is a publish-only repository and all pull requests are ignored. Please follow Documentation/SubmittingPatches procedure for any of your improvements.
5,15541,tips,Most commonly used git tips and tricks.

Don't you think smart?

For developer


  • poetry
  • make


  1. Create version branch like as 3.4.0
  2. Create Issue and development! (Feature branch is optional)
  3. Commit with prefix emoji like "📝", and suffix issue number like "#120"


# Create env
$ make init-dev

# Build documentation and run server locally
$ make serve-docs

# Test (Doc test & Unit test)
$ make test

Version up

Confirm that your branch name equals release version

make release

Finally, create pull request and merge to master!!

Project details

Release history Release notifications

Download files

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

Files for owlmixin, version 5.5.0
Filename, size File type Python version Upload date Hashes
Filename, size owlmixin-5.5.0-py3-none-any.whl (20.2 kB) File type Wheel Python version py3 Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page