It provides a simple and dirty way to define generic methods to existing types. You can make overloaded methods using this.
Compatibility
TypeQuery does not depend on any non-standard libraries. It works on these environments:
Python 2.5–2.7, 3.2–3.5
CPython, Stackless, PyPy, Jython
Install
Install using pip:
$ pip install TypeQuery
Example: JSON encoder
from typequery import GenericMethod
from sys import version_info
from re import sub
from numbers import Real
from collections import Mapping, Iterable
if version_info.major > 2:
basestring = string = str
else:
string = unicode
json = GenericMethod('json')
@json.of(type(None))
def json(value):
return 'null'
@json.of(bool)
def json(value):
return 'true' if value else 'false'
@json.of(Real)
def json(value):
return str(value)
@json.of(string)
def json(value):
def escape(match):
s = match.group(0)
if s in ('\\', '"', '\b', '\f', '\n', '\r', '\t'):
return '\\' + s
n = ord(s)
if n < 0x10000:
return r'\u%04x' % n
n -= 0x10000
s1 = 0xd800 | ((n >> 10) & 0x3ff)
s2 = 0xdc00 | (n & 0x3ff)
return r'\u%04x\u%04x' % (s1, s2)
return '"%s"' % sub(r'([\\"]|[^\ -~])', escape, value)
@json.of(Iterable)
def json(value):
return '[%s]' % ', '.join(json(element) for element in value)
@json.of(Mapping)
def json(value):
return '{%s}' % ', '.join('%s: %s' % (json(string(key)), json(value))
for key, value in value.items())
And defined json function works like:
>>> json(123)
'123'
>>> json(True)
'true'
>>> json({'apple': 3, 'banana': 5, 'carrot': 1})
'{"apple": 3, "banana": 5, "carrot": 1}'
As the above shows, you can define type-aware instance methods to existing types even including ABCs like collections.Iterable.
Changelog
Version 0.1.5
Released on June 23, 2016.
Compatibility with recent Python versions: Python 3.3 to 3.5, and PyPy3.
Version 0.1.4
Released on October 18, 2012.
Don’t use bitbucket-distutils anymore to prevent several headaches related packaging and distribution.
Version 0.1.3
Released on August 29, 2012.
Fixed a bug of handling multiple types by one function. [#2]
Version 0.1.2
Released on August 15, 2012.
You can inherit existing generic methods using GenericMethod.inherit() method.
Added with_receiver option for GenericMethod.of() decorator and Decorator constructor.
Version 0.1.1
Released on May 22, 2012.
Now it works well with abstract base classes other than abc.ABCMeta.
Fixed a bug of GenericMethod.clone() method. It does not reflect cloned one’s changes to the original anymore. [#1]
Version 0.1.0
Released on May 21, 2012.
Initial release.
Metadata
Release files for TypeQuery 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| TypeQuery-0.1.5.tar.gz | 7.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| TypeQuery-0.1.5-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 16.9 kB
Release files / TypeQuery-0.1.5.tar.gz
| Download URL | TypeQuery-0.1.5.tar.gz |
|---|---|
| Size | 7.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
00f60785053723bca1edb519264fb05c3becbe462ba157da47a90e7ae34fb9bd
|
|
BLAKE2b-256 checksum How to use checksums |
acf97015735ceac509438f54a944fb0e17f7f429e39712ee6c7e01273dbd3a37
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / TypeQuery-0.1.5-py2.py3-none-any.whl
| Download URL | TypeQuery-0.1.5-py2.py3-none-any.whl |
|---|---|
| Size | 9.8 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
a8fc9642eff2e04eb705897c3361ccc6530cffc71ec222a54135e6dba28517d6
|
|
BLAKE2b-256 checksum How to use checksums |
4a89c30bd30a30cc65c71dad3c54d85453173141856017c21f03dfa4ab0eeb25
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |