Skip to main content

.NET-like Attributes implemented as Python decorators.

Project description

Sourcecode on GitHub Sourcecode License GitHub tag (latest SemVer incl. pre-release) GitHub release (latest SemVer incl. including pre-releases) GitHub release date Dependents (via libraries.io)
GitHub Workflow - Build and Test Status Codacy - Quality Codacy - Coverage Codecov - Branch Coverage Libraries.io SourceRank
PyPI PyPI - Python Version PyPI - Status Libraries.io status for latest release Requires.io
Documentation License Documentation - Read Now!

pyAttributes

The Python package pyAttributes offers implementations of .NET-like attributes realized with Python decorators. The package also offers a mixin-class to ease using classes having annotated methods.

In addition, an ArgParseAttributes module is provided, which allows users to describe complex argparse command-line argument parser structures in a declarative way.

Attributes can create a complex class hierarchy. This helps in finding and filtering for annotated properties and user-defined data. These search operations can be called globally on the attribute classes or locally within an annotated class. Therefore the provided helper-mixin should be inherited.

Use Cases

Annotate properties and user-defined data to methods.

Derived use cases:

Planned implementations:

  • Annotate user-defined data to classes.
  • Describe test cases and test suits to get a cleaner syntax for Python's unit tests.

Technique

The annotated data is stored in an additional __dict__ entry for each annotated method. By default, the entry is called __pyattr__. Multiple attributes can be applied to the same method.

Creating new Attributes

Simple User-Defined Attribute

class SimpleAttribute(Attribute):
  pass

User-Defined Attribute with Data

class DataAttribute(Attribute):
  data: str = None

  def __init__(self, data:str):
    self.data = data

  @property
  def Data(self):
    return self.data

Applying Attributes to Methods

class ProgramWithHelper(AttributeHelperMixin):
  @SimpleAttribute()
  def Method_1(self):
    """This method is marked as simple."""

  @DataAttribute("hello world")
  def Method_2(self):
    """This method as annotated data."""

Finding Methods with Attributes

Finding Methods with Global Search

methods = SimpleAttribute.GetMethods()
for method, attributes in methods.items():
  print(method)
  for attribute in attributes:
    print("  ", attribute)

Finding Methods with Class-Wide Search

class ProgramWithHelper(AttributeHelperMixin):
  @SimpleAttribute()
  def Method_1(self):
    """This method is marked as simple."""

  @DataAttribute("hello world")
  def Method_2(self):
    """This method as annotated data."""
 
  def test_GetMethods(self):
    methods = self.GetMethods(filter=DataAttribute)
    for method, attributes in methods.items():
      print(method)
      for attribute in attributes:
        print("  ", attribute)

  def test_GetAttributes(self):
    attributes = self.GetAttributes(self.Method_1)
    for attribute in attributes:
      print("  ", attribute)

Contributors

License

This Python package (source code) licensed under Apache License 2.0.
The accompanying documentation is licensed under Creative Commons - Attribution 4.0 (CC-BY 4.0).


SPDX-License-Identifier: Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyAttributes-2.5.1.tar.gz (14.4 kB view details)

Uploaded Source

Built Distribution

pyAttributes-2.5.1-py3-none-any.whl (13.5 kB view details)

Uploaded Python 3

File details

Details for the file pyAttributes-2.5.1.tar.gz.

File metadata

  • Download URL: pyAttributes-2.5.1.tar.gz
  • Upload date:
  • Size: 14.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2

File hashes

Hashes for pyAttributes-2.5.1.tar.gz
Algorithm Hash digest
SHA256 7f47d2c862df129e15b02ffb7efb3929e946435e69e567f09199b1d80b63759d
MD5 49e22537fca0e1991ab58fe41cb45856
BLAKE2b-256 81e76171db8acd68eec0715ac622bd5999ec6c64f56ee1d6b40dcfc038d79c0e

See more details on using hashes here.

File details

Details for the file pyAttributes-2.5.1-py3-none-any.whl.

File metadata

  • Download URL: pyAttributes-2.5.1-py3-none-any.whl
  • Upload date:
  • Size: 13.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2

File hashes

Hashes for pyAttributes-2.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 15e04d85353ab38dfdfa40940e3a3386c0d394e9900d8b41f7d04587d429b83a
MD5 0365e23658c92d1f6620cab837d24ace
BLAKE2b-256 65ae025111432a6198c0d5bcd6993e0f2b59dd10140afaa8a28de1d4db3d9c45

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page