semvec/pypi-packages huggingface dataset:
gungnir 0.3.0
Homelab Automation Bot to Guard your very own Asgard
Requires Python: >=3.9

# gungnir

<div align="center">

[![GitHub](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white)](https://github.com/GeekMasher/gungnir)
[![GitHub Actions](https://img.shields.io/github/actions/workflow/status/geekmasher/gungnir/python-package.yml?style=for-the-badge)](https://github.com/GeekMasher/gungnir/actions/workflows/python-package.yml?query=branch%3Amain)
[![GitHub Issues](https://img.shields.io/github/issues/geekmasher/gungnir?style=for-the-badge)](https://github.com/GeekMasher/gungnir/issues)
[![GitHub Stars](https://img.shields.io/github/stars/geekmasher/gungnir?style=for-the-badge)](https://github.com/GeekMasher/gungnir)
[![Python Versions](https://img.shields.io/pypi/pyversions/gungnir?style=for-the-badge)](https://pypi.org/project/gungnir/)
[![Licence](https://img.shields.io/github/license/Ileriayo/markdown-badges?style=for-the-badge)](./LICENSE)

</div>

## Overview

Gungnir is a Homelab Automation Bot to Guard your very own Asgard from the dangerous world of out of date components.

## Example

![DependencyTrack Example](./assets/dependency-track-example.png)

## Usage

### CLI

**Requirements:**

- Python 3.9+
- [Syft](https://github.com/anchore/syft) (generate bill of materials)

**Install (pip):**

```bash
pip install gungnir
```

**Help:**

```bash
python -m gungnir --help
```

```
Gungnir - Homelab Automation Tool to Guard your very own Asgard

options:
  -h, --help            show this help message and exit
  --debug               Enable Debug mode
  --banner              Show banner
  --version             Show version
  --container           Enable container mode
  --disable-banner      Disable banner
  --hostname HOSTNAME   Hostname (mainly for containers)

DependencyTrack:
  -t TOKEN, --token TOKEN
                        DependencyTrack Token
  -i INSTANCE, --instance INSTANCE
                        DependencyTrack Instance
```

### Docker-Compose

Download the [`docker-compose.yml` example](./docker-compose.yml) and run with the following command:

```bash
docker-compose up
```

**Environment Variable:**

```env
DEPENDENCYTRACK_URL=http://localhost:9090
DEPENDENCYTRACK_TOKEN=ABCD...
```

## License

This project is licensed under the terms of the MIT open source license. Please refer to [MIT](./LICENSE) for the full terms.

## Support

Please create issues for any feature requests, bugs, or documentation problems.

## Acknowledgement

- @GeekMasher - Author and Maintainer
paradi 0.1.3.post2
This is an abstract class which purpose is to interface any Rest API using python's standard functionnalities.
Requires Python: >=3.10

# Paradi
### Python Abstract Restful Api Dialoger Interface

This is an abstract class which purpose is to interface any Rest API using python's standard functionnalities. <br/>
It is meant to be very simple to allow a flexible implementation of the many ways to interact with any API, especially regarding the many different authentication methods. <br/>
You should also put in the child class any code that would parse the requests kwargs or read the output data format of the API and turn it into something more readable than a json (like a pandas dataframe). <br/>

# Example Implementation
The API is hosted at `https://exampleapiurl.com`. <br/>
To log in, you need to provide a username and a password in a **post** request at `https://exampleapiurl.com/login` which will return you a temporary connection token in the response. <br/>
To log out, you need to do a **get** request at `https://exampleapiurl.com/logout` with your credentials. <br/>
For any other request, to get your private data at `https://exampleapiurl.com/values` you need to provide your credentials in the header. <br/>

```py
class Dummy(Paradi):
    def __init__(self):
        super().__init__(entry=os.getenv('API_ENDPOINT')",
                         login_uri="login",
                         logout_uri="logout",
                         login_kwargs={"headers": {"Content-Type": r"application/x-www-form-urlencoded"},
                                       "data": {"username":os.getenv("API_USERNAME"),
                                                "password":os.getenv("API_PASSWORD")}})
        
        def _save_auth(self,
                       response: requests.Response
                       ):
            self.access_token = json.loads(response.text)['access_token']
            self.token_type = json.loads(response.text)['token_type']
            self.session.headers.update({'Authorization': f'{self.token_type} {self.access_token}'})

        def get_raw_data(self):
            response = self.get("values")
            return pd.json_normalize(json.loads(response.text), "data")
```

To use your newly made class you need to use the `with` syntax provided by python:

```py
with Dummy() as dummy:
    raw_data = dummy.get_raw_data()
```
This will ensure that the connection with your API is closed as soon as you are finished with the data recovery.