Tools for reducing repetition in Python code
Project description
DRYtools
version number: 0.1.3
author: Dan Elias
This library provides tools to make Python code shorter, less repetitive and more readable.
Features
function annotations to coerce and/or validate parameters, and
decorators and mixins to add groups of Python standard methods to classes
Example
This example provides implementation with and without drytools for a class representing a person’s name and age. The required behaviour is:
The constructor should accept a name and an age
age should be coerced to an integer
if name is not of type str, raise a TypeError
if age is negative or exceeds 200, raise a ValueError
The full set of comparison methods (ie: __lt__, __eq__ etc) should be implemented reflecting an ordering by age (with alphabetical ordering by name for people with the same age)
Without drytools
from functools import total_ordering
@total_ordering
class person:
def __init__(self, name, age):
if not isinstance(name, str):
raise TypeError(name)
age = int(age)
if (age < 0) or (age > 200):
raise ValueError(age)
self.name = name
self.age = age
def _comp(self):
return (self.age, self.name)
def __eq__(self, other):
return self._comp() == other._comp()
def __gt__(self, other):
return self._comp() > other._comp()
With drytools
from operator import ge, le
from drytools import args2attrs, check, compose_annotations, ordered_by
@ordered_by('age', 'name')
class person:
@compose_annotations
@args2attrs
def __init__(self, name: check(isinstance, str, raises=TypeError),
age:(int, check(ge, 0), check(le, 200))):
pass
Getting started
$ pip install drytools
Documentation
Contributing
Issue Tracker: https://github.com/dan-elias/drytools/issues
Source Code: https://github.com/dan-elias/drytools.git
Continuous integration
License
The project is licensed under the GPL-3 license.
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 Distribution
Built Distribution
Hashes for drytools-0.1.3-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08ef108e02fbcffd9839fd53f5a9b15ee5bf807f7312ba768aab733e9c3de7f5 |
|
MD5 | a39679be8d38d8260f415921f253ed7b |
|
BLAKE2b-256 | ea660848b50ae62bbf6d384040877cd12ed0041904d4a06347b3fe15a96552f0 |