Metadata-Version: 2.1
Name: dynattr
Version: 0.0.2
Summary: Dynamic Attributes Mixin
Home-page: https://github.com/dsm-72/dynattr
Author: dsm-72
Author-email: sumner.magruder@yale.edu
License: Apache Software License 2.0
Keywords: nbdev jupyter notebook python attr dyn dynattr
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3.11
Classifier: License :: OSI Approved :: Apache Software License
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: atyp
Provides-Extra: dev

# dynattr

<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

## Developer Guide

### Setup

``` sh
# create conda environment
$ mamba env create -f env.yml

# update conda environment
$ mamba env update -n dynattr --file env.yml
```

### Install

``` sh
pip install -e .

# install from pypi
pip install dynattr
```

### nbdev

``` sh
# activate conda environment
$ conda activate dynattr

# make sure the dynattr package is installed in development mode
$ pip install -e .

# make changes under nbs/ directory
# ...

# compile to have changes apply to the dynattr package
$ nbdev_prepare
```

### Publishing

``` sh
# publish to pypi
$ nbdev_pypi

# publish to conda
$ nbdev_conda --build_args '-c conda-forge'
$ nbdev_conda --mambabuild --build_args '-c conda-forge -c dsm-72'
```

# Usage

## Installation

Install latest from the GitHub
[repository](https://github.com/dsm-72/dynattr):

``` sh
$ pip install git+https://github.com/dsm-72/dynattr.git
```

or from [conda](https://anaconda.org/dsm-72/dynattr)

``` sh
$ conda install -c dsm-72 dynattr
```

or from [pypi](https://pypi.org/project/dynattr/)

``` sh
$ pip install dynattr
```

## Documentation

Documentation can be found hosted on GitHub
[repository](https://github.com/dsm-72/dynattr)
[pages](https://dsm-72.github.io/dynattr/). Additionally you can find
package manager specific guidelines on
[conda](https://anaconda.org/dsm-72/dynattr) and
[pypi](https://pypi.org/project/dynattr/) respectively.

## Example

``` python
from atyp import StrQ
from typing import ClassVar
class Foo(DynamicAttributesMixin):
    X: str = 'X'
    x: str = 'X'
    Z: ClassVar[str] = 'Z'

    toinstname = lambda x: f'_{x}'
    totypename = lambda x: x.upper()

    def __init__(self, x: StrQ = None):
        self.x = (x or self.x)

f, b = Foo(x='x'), Foo()
```

``` python
(f.x, f.X, f.Z), (b.x, b.X, b.Z), (Foo.x, Foo.X, Foo.Z, )
```

    (('x', 'X', 'Z'), ('X', 'X', 'Z'), ('X', 'X', 'Z'))

``` python
f.getinstclsattr('x', toinstname=None, totypename=None)
```

    'X'
