Skip to content

Commit

Permalink
release 7.249.22317
Browse files Browse the repository at this point in the history
  • Loading branch information
klahnakoski committed Nov 13, 2022
2 parents 7193505 + b0e614c commit 3dfa7c0
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 21 deletions.
25 changes: 10 additions & 15 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
language: python
python:
- 3.6
- 3.7.8
- 3.8
- 3.9

- 3.7.8
- 3.8
- 3.9
env:
global:
- PYTHONPATH=.

- PYTHONPATH=.
install:
- "pip install coverage"
- "pip install coveralls"
- "pip install -r requirements.txt"
- "pip install -r tests/requirements.txt"

- pip install coverage
- pip install coveralls
- pip install -r requirements.txt
- pip install -r tests/requirements.txt
script:
- "coverage run -m unittest discover tests"

- coverage run -m unittest discover tests
after_success:
- coveralls
- coveralls
6 changes: 3 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@
setup(
author='Kyle Lahnakoski',
author_email='kyle@lahnakoski.com',
classifiers=["Development Status :: 4 - Beta","Topic :: Software Development :: Libraries","Topic :: Software Development :: Libraries :: Python Modules","License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)","Programming Language :: Python :: 3.6","Programming Language :: Python :: 3.7","Programming Language :: Python :: 3.9"],
classifiers=["Development Status :: 4 - Beta","Topic :: Software Development :: Libraries","Topic :: Software Development :: Libraries :: Python Modules","License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)","Programming Language :: Python :: 3.7","Programming Language :: Python :: 3.8","Programming Language :: Python :: 3.9"],
description='Object destructuring of function parameters for Python!',
extras_require={"tests":["mo-testing","mo-times","mo-json","mo-threads"]},
include_package_data=True,
install_requires=["mo-dots==9.238.22316","mo-future==6.230.22310"],
install_requires=["mo-dots==9.249.22317","mo-future==6.230.22310"],
license='MPL 2.0',
long_description='\n# More KWARGS!\n\nObject destructuring of function parameters for Python!\n\n[![PyPI Latest Release](https://img.shields.io/pypi/v/mo-kwargs.svg)](https://pypi.org/project/mo-kwargs/)\n[![Build Status](https://app.travis-ci.com/klahnakoski/mo-kwargs.svg?branch=master)](https://travis-ci.com/github/klahnakoski/mo-kwargs)\n [![Coverage Status](https://coveralls.io/repos/github/klahnakoski/mo-kwargs/badge.svg?branch=dev)](https://coveralls.io/github/klahnakoski/mo-kwargs?branch=dev)\n[![Downloads](https://pepy.tech/badge/mo-kwargs)](https://pepy.tech/project/mo-kwargs)\n\n\n## Motivation\n\nJavascript has [object destructuring](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#object_destructuring), and it can be used for function parameters. This has a couple of benefts over Python\'s keyword arguments:\n\n* Extra caller parameters are ignored (eg `f({a, b, c})`)\n* Duplicate parameters are handled elegantly (eg `f({a, a})`) \n\nThe `mo-kwargs` library provides this functionality with the `@override` decorator, with additional benefits:\n \n * required parameters throw an error if missing, just like regular Python\n * all parameters, even ones not in the argument list, are passed in the optional `kwargs` parameter \n \nThe `@override` decorator adds a `kwargs` argument which can be passed a dict of call parameters; but unlike `**kwargs`, it will not raise duplicate key exceptions.\n\n## Provide default values\n\nWe decorate the `login()` function with `@override`. `username` is a required parameter, and `password` will default to `None`. \n\n @override\n def login(username, password=None):\n pass\n\nDefine some `dicts` for use with our `kwargs` parameter:\n\n creds = {"userame": "ekyle", "password": "password123"}\n alt_creds = {"username": "klahnakoski"}\n\n\nThe simplest case is when we use `kwargs` with no overrides\n\n login(kwargs=creds)\n # SAME AS\n login(**creds)\n # SAME AS\n login(username="ekyle", password="password123")\n\nYou may override any property in `kwargs`: In this case it is `password`\n\n login(password="123", kwargs=creds)\n # SAME AS\n login(username="ekyle", password="123")\n\nThere is no problem with overriding everything in `kwargs`:\n\n login(username="klahnakoski", password="asd213", kwargs=creds)\n # SAME AS\n login(username="klahnakoski", password="asd213")\n\nYou may continue to use `**kwargs`; which provides a way to overlay one parameter template (`creds`) with another (`alt_creds`)\n\n login(kwargs=creds, **alt_creds)\n # SAME AS\n login(username="klahnakoski", password="password123")\n\n## Handle too many parameters\n\nSometimes your method parameters come from a configuration file, or some other outside source which is outside your control. There may be more parameters than your method is willing to accept. \n\n creds = {"username": "ekyle", "password": "password123", "port":9000}\n def login(username, password=None):\n print(kwargs.get("port"))\n\nWithout `mo-kwargs`, passing the `creds` dictionary directly to `login()` would raise a key error\n\n >>> login(**creds)\n Traceback (most recent call last):\n File "<stdin>", line 1, in <module>\n TypeError: login() got an unexpected keyword argument \'port\'\n \nThe traditional solution is to pass the parameters explicitly:\n\n login(username=creds.username, password=creds.password)\n\nbut that can get get tedious when done often, or the parameter list get long. `mo-kwargs` allows you to pass the whole dictionary to the `kwargs` parameter; only the parameters used by the method are used:\n\n @override\n def login(username, password=None):\n pass\n \n login(kwargs=creds)\n # SAME AS\n login(username=creds.username, password=creds.password)\n\n## Package all parameters\n\nYour method can accept `kwargs` as a parameter. If it does, ensure it defaults to `None` so that it\'s not required.\n\n @override\n def login(username, password=None, kwargs=None):\n print(kwargs.get("username"))\n print(kwargs.get("port"))\n\n`kwargs` will always be a dict, possibly empty, with the full set of parameters. This is different from using `**kwargs` which contains only the remainder of the keyword parameters.\n\n >>> creds = {"username": "ekyle", "password": "password123", "port":9000}\n >>> login(**creds)\n ekyle\n 9000\n',
long_description_content_type='text/markdown',
name='mo-kwargs',
packages=["mo_kwargs"],
url='https://github.com/klahnakoski/mo-kwargs',
version='7.238.22316',
version='7.249.22317',
zip_safe=False
)
6 changes: 3 additions & 3 deletions setuptools.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
"Topic :: Software Development :: Libraries",
"Topic :: Software Development :: Libraries :: Python Modules",
"License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9"
],
"description": "Object destructuring of function parameters for Python!",
"extras_require": {"tests": ["mo-testing", "mo-times", "mo-json", "mo-threads"]},
"include_package_data": true,
"install_requires": ["mo-dots==9.238.22316", "mo-future==6.230.22310"],
"install_requires": ["mo-dots==9.249.22317", "mo-future==6.230.22310"],
"license": "MPL 2.0",
"long_description": {
"$concat": [
Expand Down Expand Up @@ -134,6 +134,6 @@
"name": "mo-kwargs",
"packages": ["mo_kwargs"],
"url": "https://github.com/klahnakoski/mo-kwargs",
"version": "7.238.22316",
"version": "7.249.22317",
"zip_safe": false
}

0 comments on commit 3dfa7c0

Please sign in to comment.