Skip to main content

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

Project description

OwlMixin

pypi versions Actions Status codecov license

(゚∀゚) 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

💪 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

📜 API Reference

https://tadashi-aikawa.github.io/owlmixin/

👉 Examples

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"}
    ]
})

Then...

>>> jiro.id
10
>>> jiro.name
'jiro'

>>> 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())
favorite:
  - 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))
id,name,color
1,apple,
2,orange,green

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]

Then...

>>> print(
...     GithubRepository
...         .from_json_url("https://api.github.com/search/repositories?q=git")
...         .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': v.name,
...             'DESCRIPTION': v.description
...         })
...         .to_csv(fieldnames=["RANK", "STAR", "NAME", "DESCRIPTION"], with_header=True)
... )
RANK,STAR,NAME,DESCRIPTION
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 developers

Requirements

  • poetry
  • make

Flow

  1. Development on master and if you need branches and issues, create them
  2. Commit with prefix emoji such as "📝", and suffix issue number like "#120"

Commands

# Create env
$ poetry env use <path of python 3.8>
$ poetry install

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

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

📦 Release

https://github.com/tadashi-aikawa/owlmixin/actions/workflows/release.yaml?query=workflow%3ARelease

(Appendix) Another way

If you can't or don't want to use GitHub Actions, you can release locally as following.

(a1) Requirements

  • Windows is not supported!!!
  • poetry (with pypi authentications)
  • make

(a2) Commands

make release version=x.y.z

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

owlmixin-6.2.4-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

File details

Details for the file owlmixin-6.2.4-py3-none-any.whl.

File metadata

  • Download URL: owlmixin-6.2.4-py3-none-any.whl
  • Upload date:
  • Size: 20.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.3 CPython/3.12.4 Linux/6.5.0-1023-azure

File hashes

Hashes for owlmixin-6.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 e9e4df0a66308d5d5869d7351ed6ef920daa4446bfdb69f7a27e115ac80f3d28
MD5 ea7cda8b8ec504134ed26dc1e69db45a
BLAKE2b-256 2260f194d76cf1d57b9106aec949f404ac22e1d4d618de292c8a984124d6069e

See more details on using hashes here.

Supported by

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