Metadata-Version: 2.1
Name: Katari
Version: 0.0.7
Summary: A SIP(Session Initiation Protocol) Application Framework
Home-page: http://packages.python.org/Katari
Author: Aaron Parfitt
Author-email: aaronparfitt123@gmail.com
License: BSD
Keywords: voip
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python :: 3.6
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Description-Content-Type: text/markdown

![alt text](https://github.com/hyperioxx/Katari/blob/master/Katari.png "Katari Logo")

# Katari - SIP (Session Initiated Protocol) Application Framework

[![PyPI pyversions](https://img.shields.io/pypi/status/Katari.svg)](https://pypi.org/project/Katari/)
[![PyPI version shields.io](https://img.shields.io/pypi/v/Katari.svg)](https://pypi.python.org/pypi/Katari/)
[![PyPI license](https://img.shields.io/pypi/l/Katari.svg)](https://pypi.python.org/pypi/Katari/)
![PyPI version shields.io](https://img.shields.io/pypi/dm/Katari.svg)


## Installing

```
pip install Katari 
```

## Installing from Git

```
pip install git+https://github.com/hyperioxx/Katari.git
```


## Getting Started

to create a katari project run the following command in your terminal

```bash
katari --build-app <project name>
```


#### app.py
```python
import settings
from Katari import KatariApplication
from Katari.sip.response import ResponseFactory

app = KatariApplication(settings=settings)

@app.invite()
def do_invite(request, client):
    # add INVITE logic here 
    response = ResponseFactory.build(200) # 200 OK
    app.send(request.create_response(response), client)

@app.register()
def do_register(request, client):
    # add REGISTER logic here 
    response = ResponseFactory.build(401) # 401 unauthorized 
    app.send(request.create_response(OK200()), client)

@app.options()
def do_options(request, client):
    # add OPTIONS logic here 
    app.send(request.create_response(OK200()), client)

@app.info()
def do_info(request, client):
    # add INFO logic here 
    app.send(request.create_response(OK200()), client)

if __name__ == "__main__":   
    app.run()

```


## Writing your own middleware

create a directory called middleware within your project

```
myproject -
   - app.py
   - settings.py
   - middleware   << LIKE THIS 
     - __init__.py
     - test.py
```

your middleware can modify the sip message before it reaches your main logic using the process_request method and also modify the response before it gets sent back to the client using process response method.

#### Example

```python 

from Katari.interfaces import MiddlewareInterface

class Test(MiddlewareInterface):

    def process_request(self, message):
        print(str(message))
        return message


    def process_response(self, message):
        print(str(message))
        return message

```











