Advanced descriptors for special cases.
Project description
Advanced descriptors
This package includes helpers for special cases:
SeparateClassMethod - allow to have classmethod and normal method both with the same name.
AdvancedProperty - property with possibility to set class wide getter.
LogOnAccess - property with logging on successful get/set/delete or failure.
SeparateClassMethod
This descriptor can be set using standard decorator syntax. Create instance with arguments:
def imeth(instance):
return instance.value
def cmeth(owner):
return owner.value
class Target(object):
value = 1
def __init__(self):
self.value = 2
getval = advanced_descriptors.SeparateClassMethod(
imeth, cmeth
)
Create instance wrapping as decorator:
class Target(object):
value = 1
def __init__(self):
self.value = 2
@advanced_descriptors.SeparateClassMethod
def getval(self):
return self.value
@getval.class_method
def getval(cls):
return cls.value
Cases with method only and classmethod only is useless: method as-is and @classmethod should be used in corresponding cases.
AdvancedProperty
This descriptor should be used in cases, when in addition to normal property API, class getter is required. If class-wide setter and deleter also required - you should use standard propery in metaclass.
Usage examples:
In addition to normal property API:
class Target(object): _value = 777 def __init__(self): self._value = 42 @advanced_descriptors.AdvancedProperty def val(self): return self._value @val.setter def val(self, value): self._value = value @val.deleter def val(self): self._value = 0 @val.cgetter def val(cls): return cls._value
Use class-wide getter for instance too:
class Target(object): _value = 1 val = advanced_descriptors.AdvancedProperty() @val.cgetter def val(cls): return cls._value
LogOnAccess
This special case of property is useful in cases, where a lot of properties should be logged by similar way without writing a lot of code.
Basic API is conform with property, but in addition it is possible to customize logger, log levels and log conditions.
Usage examples:
Simple usage. All by default. logger is re-used from instance if available with names logger or log else used internal advanced_descriptors.log_on_access logger:
import logging class Target(object): def init(self, val='ok') self.val = val self.logger = logging.get_logger(self.__class__.__name__) # Single for class, follow subclassing def __repr__(self): return "{cls}(val={self.val})".format(cls=self.__class__.__name__, self=self) @advanced_descriptors.LogOnAccess def ok(self): return self.val @ok.setter def ok(self, val): self.val = val @ok.deleter def ok(self): self.val = ""
Use with global logger for class:
class Target(object): def init(self, val='ok') self.val = val def __repr__(self): return "{cls}(val={self.val})".format(cls=self.__class__.__name__, self=self) @advanced_descriptors.LogOnAccess def ok(self): return self.val @ok.setter def ok(self, val): self.val = val @ok.deleter def ok(self): self.val = "" ok.logger = 'test_logger' ok.log_level = logging.INFO ok.exc_level = logging.ERROR ok.log_object_repr = True # As by default ok.log_success = True # As by default ok.log_failure = True # As by default ok.log_traceback = True # As by default ok.override_name = None # As by default: use original name
Testing
The main test mechanism for the package advanced-descriptors is using tox. Available environments can be collected via tox -l
CI systems
For code checking several CI systems is used in parallel:
Travis CI: is used for checking: PEP8, pylint, bandit, installation possibility and unit tests. Also it’s publishes coverage on coveralls.
coveralls: is used for coverage display.
Azure CI: is used for functional tests on Windows.
CD system
Travis CI: is used for package delivery on PyPI.
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 Distributions
Hashes for advanced-descriptors-3.0.7.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6440480441f234d3faf3c49306c2f2817c2c29e62a8db10b6dbe3294dca23582 |
|
MD5 | b9d3aa47543f928cb5c3f8f3e417b1ed |
|
BLAKE2b-256 | 971d298009e88aabcb3be02abce8d39e965ad2035aea61df139121e40646de73 |
Hashes for advanced_descriptors-3.0.7-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3ed8b61a46bc77464e5589d1081201087e5f002e8d15626f6fa74373a6298391 |
|
MD5 | e95b9447d0f3993eb8fd85b08e51b727 |
|
BLAKE2b-256 | b08fd3a28a728a8510f096e8d4798c8e8f679324ecd6795ed44e21c44a51ecd1 |
Hashes for advanced_descriptors-3.0.7-cp38-cp38-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a5177a81dd18270970ff7cc0a25f0becfdcc7d4cdf3bf1fed082e4e1cd90dcc6 |
|
MD5 | 65d61b0c0bd419b83b6907857d295fe4 |
|
BLAKE2b-256 | ccf2e845e283773fbe8d7d23a071ec2bbba7526783ee612f6e8f3f45853748e9 |
Hashes for advanced_descriptors-3.0.7-cp38-cp38-manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d9fa138e149af64a411968eb6ee9abffb9faaee514d44314943aeab624b3291e |
|
MD5 | a574fe4132188c7129810a76659cd214 |
|
BLAKE2b-256 | afa47a2eb8cc05711f5249de6d41d6bd876ec1c306d757a801131dbd245423ad |
Hashes for advanced_descriptors-3.0.7-cp38-cp38-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 044de208aa659c5f7e1f8bae71ed5a78ed1af1f7a5fb9ab2df7f31a574e480bd |
|
MD5 | 631d67c0bd6070b4fbe2d19c4d6398f6 |
|
BLAKE2b-256 | b24025b4db38b59f9667167cedf9f81e0608229d63abd3f20149aebed5af5258 |
Hashes for advanced_descriptors-3.0.7-cp38-cp38-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 52c78a5f5c137a6afa6ef8b58fab4d18d0013decff585dbfd3ee819b2d12ab9e |
|
MD5 | 8fd4a7e9ce6767e234c02d0d5f4af53c |
|
BLAKE2b-256 | b29a59d3aa31aff8e0db97cfd87aff6488a4e4ea8ed3d3cfdda7220eaf85cfea |
Hashes for advanced_descriptors-3.0.7-cp38-cp38-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5056814a0662328b21c8319fdceeaba5d78246946e21e0b6fbf7b9fe84bb011e |
|
MD5 | 3360bc7115435a6a1ad86c431b87a869 |
|
BLAKE2b-256 | 64472f27387c3b3fc0a7a1b0c9bfc2a453edc329ea4d6ae74a658c5a298f3717 |
Hashes for advanced_descriptors-3.0.7-cp38-cp38-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d7cb285c7915e0d67850a390bc04c6068d0c1e9066aa96861362278d4e3b8cc8 |
|
MD5 | 8f5dc2c7f67b23d05006faf42b5ccf48 |
|
BLAKE2b-256 | 8ddba7be0f9e2f008b6093a034424eaee6dcf7ae8d3aa2bdb4b24594f25f9e95 |
Hashes for advanced_descriptors-3.0.7-cp38-cp38-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f0e818bcca99d06ee87ba1478928d82ef00ca5c2fe4aedbefcff009e24309ae2 |
|
MD5 | feea25fd3bc670b51da7253a59715255 |
|
BLAKE2b-256 | 0613da174c56c2ef5d284d3064f7dfbad5d1c744f6339f4c25e2b1fcece06bc3 |
Hashes for advanced_descriptors-3.0.7-cp37-cp37m-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2304d51295703545f5dbee6970a14525bfefb6265761906793f6b10a144ab477 |
|
MD5 | 45e5eb98ed7dfe013aa9d0deb95c2bbe |
|
BLAKE2b-256 | 10352801a78d56e68cb07c31f9006a939bcbc0851358ce52375c271c4ea4d903 |
Hashes for advanced_descriptors-3.0.7-cp37-cp37m-manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 022c1070cadd45f18ba428dfaaf316ab216be417979daff126d8e97d1722e1fc |
|
MD5 | a668ad3cc9c386f2c2fffa61cc42d656 |
|
BLAKE2b-256 | 6646646bc847ea0a4c0fe79c4572b7395cd03d73c870c2951520cf46f6273401 |
Hashes for advanced_descriptors-3.0.7-cp37-cp37m-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 114ac5e0bbba19f5d6ed32f45128ac0d5bc92093aa617ea636a3e7d6bcef25e6 |
|
MD5 | 893d55231bd6240b923c34fc66ec42a3 |
|
BLAKE2b-256 | ec68f5b69042be09f442801df8d279656353a840e355299c0e02ad9c812314f8 |
Hashes for advanced_descriptors-3.0.7-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 105e91477440cb2f7d9c0fb9173aa0ac8c8f996afc31fe56fcf3d347cb7f49ff |
|
MD5 | a6fd4a13c63bfba6a7f296b1e82f7263 |
|
BLAKE2b-256 | 320c480720ffc83d1c396e4b386e118282165c746700682a304c2dbacacf1b2f |
Hashes for advanced_descriptors-3.0.7-cp37-cp37m-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ccce5197e307f52fde9998f14c6aedac765d812444085ff4ae8e94e5df7a07ad |
|
MD5 | 79219b80ab634d038e188d9f517792b0 |
|
BLAKE2b-256 | e8ffb476c35372675910f99e59717bf7fb7216b480811bc661870d795c0e4867 |
Hashes for advanced_descriptors-3.0.7-cp37-cp37m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e9ab766419007caeada27d23a14dea1edd52b213c00bffd031a0ddfeb8e01ff8 |
|
MD5 | b586df2702fe86ff3c913d409cb9670d |
|
BLAKE2b-256 | c1f7c52761a72a044774365063c80337450dd2f0985d500075ade6c1aede399d |
Hashes for advanced_descriptors-3.0.7-cp37-cp37m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 923fc909e70caea0ac0a4019d331ab19d1e5dae8b3c5cd779a8eb46fc6ea37ab |
|
MD5 | 9406e1f7d48b93dcf154cb4d46750e13 |
|
BLAKE2b-256 | 56de0c9a66e39d486cea4f15cb48dcb06456b7f5821ea35bc46abae96f934afd |
Hashes for advanced_descriptors-3.0.7-cp36-cp36m-manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 49cb520902c17b0d146d1c63ebfbfe1e7655bbad9eb45014c8438649df8934eb |
|
MD5 | ee33add9085457e08ac47996e1fb05a5 |
|
BLAKE2b-256 | 0a8299a56f4665c29fdd1b1cb9fe38403a230313d2f284e0964371f4c63968c8 |
Hashes for advanced_descriptors-3.0.7-cp36-cp36m-manylinux2014_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2c4621b825c2dc54c87abec667e1e67201b9d4d9dfe6c32d60fb78d7487f593e |
|
MD5 | 5efae24516b835db1e918aae7417f1bb |
|
BLAKE2b-256 | eb0fe3555180a33363e754f21dac023f51b6715dc4dd7c63902419d0ab38288a |
Hashes for advanced_descriptors-3.0.7-cp36-cp36m-manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 22dfa53eb4f28da1b929d065438ec3237da2b9c5f5a6a3af940a49b0a034b661 |
|
MD5 | 3602ac87bac0d5c0dc5160ed036b5969 |
|
BLAKE2b-256 | ae432e089ad1f5f01275c524affcabd09245b6a72da1fa149a78e9b22ac76a48 |
Hashes for advanced_descriptors-3.0.7-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 51ff63e2471b0a5b8487d95f950c1d02ba22f5255027f1629cfd98e13d9eb26b |
|
MD5 | 32afd772eed34ebde2a93ca732b196ce |
|
BLAKE2b-256 | 663987bfc3a0591860b194da9007d07a2054dce54c615c63bfa6768155d988a8 |
Hashes for advanced_descriptors-3.0.7-cp36-cp36m-manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6f30c05eb524879862e0e43a57d21cccc49a90c7c986ba4b76b88f4f336b028d |
|
MD5 | f79a36d1e9da1974e193cc6cbbf056e7 |
|
BLAKE2b-256 | 333e62be356662f9879dede5e5b102c790bab941d8ba4eb5f1d40ee3807c7a50 |
Hashes for advanced_descriptors-3.0.7-cp36-cp36m-manylinux1_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 29252ecab6fcd6bb5d854d072325e7bb9228823d60ac434c20857de0b65b7996 |
|
MD5 | b0a744f36a084072dee4417d39d9193f |
|
BLAKE2b-256 | a6257391c35c903d28617e7ca1609512fd16d48c1c1cfb48b47688717965f08c |
Hashes for advanced_descriptors-3.0.7-cp36-cp36m-manylinux1_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 61215d321a7fb6506103200c1997bfeefcc0c8202a5f32b0c1ea26e42f2879f9 |
|
MD5 | 4c3ba95f011c908763e0e2caedb44f69 |
|
BLAKE2b-256 | 256c6af390ba084c9ae5eebc72e32374f7aa3172a87f52d6739d43d891d115c4 |