Metadata-Version: 2.1
Name: generic-decorators
Version: 1.0.2
Summary: Generic Python Decorators for use in any project
Home-page: https://github.com/DamZiobro/generic-decorators
Author: Damian Ziobro
Author-email: damian@xmementoit.com
License: MIT
Platform: UNKNOWN
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.0
Description-Content-Type: text/markdown
Requires-Dist: joblib (>=1.0.1)

# generic-decorators

Generic Python Decorators for use in any project.

## Install

`generic-decorators` is released to public PyPI - [generic-decorators](https://pypi.org/project/generic-decorators/). It can be installed using this command:
```
pip install generic-decorators
```

## Decorators

### `make_parallel` 

**Summary**: runs function in parallel instead of sequencial for loop.

**Example**

Parallel trigger of functions `sample_function` with 1 param `list_of_post_ids`
using `make_parallel` decorator and equivalent sequential trigger using `for loop`.

```python
def parallel_function_trigger():
    list_of_post_ids = list(range(1, 20))
    return make_parallel(sample_function)(list_of_post_ids)

#equivalent sequencial version
def serial_function_trigger():
    list_of_post_ids = list(range(1, 20))

    # Serial way of calling the function
    results = []
    for post_id in list_of_post_ids:
        res = sample_function(post_id)
        results.append(res)
    return results

```

You can use below [timing](#timing) decorator to compare time of above parallel 
and sequential versions.

### `make_parallel_processes`

**Description**: Similar functionality like [make_parallel](#make_parallel) but 
uses `mulitprocessing` instead of `threading`.

**Example**

```python
def parallel_function_trigger():
    list_of_post_ids = list(range(1, 20))
    return make_parallel_processes(sample_function)(list_of_post_ids)
```

### `timing` 

**Summary**: calculate and print how much time function processing took.

**Example**

```python
@timing
def sleep_n_seconds(n: int):
    time.sleep(n)

sleep_n_seconds(5)
```

It should print something like this (time can differ):
```
func:'sleep_n_seconds' args:[(5,), {}] took: 5.0047 sec
```



