Skip to main content

Mapping Shortcuts

Build Status CodeFactor Buy Me A Coffee

python package with useful mapping shortcuts

Installation

pip install mapping-shortcuts

Contains

  • Function decorator for mapping factory
  • Class decorator for mapping factory
  • Metaclass for mapping factory
  • Function for import all subpackages in package
  • CLI param parser and processor

Decorator factory for mapping

function decorator

from mapping_shortcuts.decors import create_collector

decorator, collection = create_collector(
    raise_on_duplicate=True,  # default: True
)

@decorator('key1')
def func1():
    ...

@decorator('key2')
def func2():
    ...

print(collection) 
'''
output: {
    'key1': <function func1 at 0x104adc430>,
    'key2': <function func2 at 0x104adc4c0>,
}
'''

class decorator

from mapping_shortcuts.decors import create_class_collector

decorator, collection = create_class_collector(
    raise_on_duplicate=True,  # default: True
    key_getter=lambda x: x.key  # default: lambda x: x.__name__
)

@decorator
class SomeClass1:
    key = 123

@decorator
class SomeClass2:
    key = 456 

print(collection) 
'''
output: {
    123: <class '__main__.SomeClass1'>,
    456: <class '__main__.SomeClass2'>,
}
'''

Metaclass factory for mapping

import abc
from mapping_shortcuts.meta import create_collection_meta

MetaClass, collections = create_collection_meta(
    base=abc.ABCMeta,  # default: type
    getter=lambda x: x.__name__,  # default: lambda x: str(x)
    raise_on_duplicate = True,  # default: True
)


class A(metaclass=MetaClass):
    ...

class B(metaclass=MetaClass):
    ...

print(collections)
'''
oputput: {
    'A': <class '__main__.A'>,
    'B': <class '__main__.B'>,
}
'''

Function for import all subpackages in package

For exmaple with have five files:

  • python code app/tools.py
  • empty file app/providers/a/__init__.py
  • empty file app/providers/b/__init__.py
  • python code in app/providers/a/module.py
  • python code inapp/providers/b/module.py

app/tools.py be like:

from mapping_shortcuts.decors import create_collector

decorator, collection = create_collector()

app/providers/a/module.py is:

from app.tools import decorator

@decorator('A-func')
def function_a():
    ...

app/providers/b/module.py is:

from app.tools import decorator

@decorator('B-func')
def function_b():
    ...

execute load_package():

from mapping_shortcuts.dirtools import load_package
from app.tools import collection

load_package('app.providers')
print(collection)
'''
output: {
    'A-func': <function function_a at 0x104cfa0e0>,
    'B-func': <function function_b at 0x104cfa290>,
}
'''

CLI param parser and processor

from pydantic import BaseModel, Field

from mapping_shortcuts.cli import cli_handler, process_sysargv


@cli_handler('command1', desc='run handler for command1')
def handler_1(args: dict[str, str | bool]) -> None:
    print('command 1 handled!')


class ArgModel(BaseModel):
    x: int = Field(alias='--x', description='arg x')
    y: int = Field(alias='--y', description='arg y')


@cli_handler('command2', desc='sum X and Y', model=ArgModel)
def handler_1(args) -> None:
    print(f'{args.x=}')
    print(f'{args.y=}')
    print(f'result: {args.x + args.y}')


@cli_handler('command3', desc='sum X and Y')
def handler_1(args: ArgModel) -> None:
    print(f'{args.x=}')
    print(f'{args.y=}')
    print(f'result: {args.x + args.y}')


if __name__ == '__main__':
    process_sysargv(
        help_msg_header='That\'s my program!',
        help_msg_run_cmd='python -m project',
    )

Execution:

$ python script.py

That's my program!
usage: python -m project [options] [command]

command:
	help - see this cool msg again
	command1 - run handler for command1
	command2 - sum X and Y
		--x - arg x
		--y - arg y
	command3 - sum X and Y
		--x - arg x
		--y - arg y
$ python script.py command3 --x=123 --y=456
args.x=123
args.y=456
result: 579

Metadata

Release files for mapping-shortcuts 1.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mapping-shortcuts 1.2.1
File Size Uploaded
mapping_shortcuts-1.2.1.tar.gz 9.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mapping-shortcuts 1.2.1
File Interpreter ABI Platform
mapping_shortcuts-1.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 20.3 kB

Release files / mapping_shortcuts-1.2.1.tar.gz

Download URL mapping_shortcuts-1.2.1.tar.gz
Size 9.3 kB
Tags Source
SHA-256 checksum
How to use checksums
729880226f21a58534601764b20e87b9d17ebd299122398633d4db0f79542fa8
BLAKE2b-256 checksum
How to use checksums
33fe1c961630d62fd2b622ad327a9f0a02765d1ffb3289cf7a52e6b836e9a8cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release files / mapping_shortcuts-1.2.1-py3-none-any.whl

Download URL mapping_shortcuts-1.2.1-py3-none-any.whl
Size 11.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2504bf8bc0260f6e0663d24a789fe7e79cec7345a9b7e67b81213aa555860400
BLAKE2b-256 checksum
How to use checksums
c0dc7d85945f67279145c3e4071510bda7d2a5a49032f985dd1dfcd83543d811
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.8

Release history Release notifications | RSS feed

This release

1.2.1 This release

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.9.9

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page