decisionrulespy 3.0.5
A simple library for simple connecting to DecisionRules API
Requires Python: >=3.6
Keywords: 'decisionrules rule solver rule_engine decision'

# DecisionRulesPy

VERSION 3 CONTAINS MAJOR CHANGES IN API INTERFACES AND NOW SUPPORTS RULEFLOWS CRUD

A simple library that allows you to easily connect to 
[DecisionRules.io](https://decisionrules.io) from your application.

# Usage

* Solver (DecisionTables, ScriptRules, RuleFlow)
* Management API (CRUD operations on DecisionTables and RuleFlows)

# 1 - Solver

Solver is designed for solving rules made in DecisionRules application.

## 1.1 - Defining solver init

Before you start solving rules you need to setup an SolverApi instance. How to do so is shown below.

```python
import decisionrules

async def solver_test():
    solver = decisionrules.SolverApi(solver_api_key)
```

## 1.2 - Defining solver method with data

Solver method expects 5 arguments

* SolverType - enum value - mandatory
* RuleId - str - mandatory
* Data - dict or json str - mandatory
* SolverStrategy - enum value - mandatory
* Version - str - optional

```python
async def solver_test():
    data = {"say": "Hello from python"}

    solver = decisionrules.SolverApi(api_key)

    # SolverType enum defines type of solver (Rule or Compostion)
    response = await solver.solve(decisionrules.SolverType.RULE, get_rule, data, decisionrules.SolverStrategies.STANDARD)

    response2 = await solver.solve(decisionrules.SolverType.RULEFLOW, compo_rule, data, decisionrules.SolverStrategies.STANDARD)
```

## 1.3 Solver with custom domain

For using custom domain just add `CustomDomain` instance to the `init method` with `url` and `protocol` parameters.

```python
async def solver_test():
    data = {"say": "Hello from python"}

    solver = decisionrules.SolverApi(api_key, decisionrules.CustomDomain("YOUR_URL", decisionrules.Protocols.HTTPS))
    
    response = await solver.solve(decisionrules.SolverType.RULE, get_rule, data, decisionrules.SolverStrategies.STANDARD)

    response2 = await solver.solve(decisionrules.SolverType.RULEFLOW, compo_rule, data, decisionrules.SolverStrategies.STANDARD)
```

# 2 - Management API

Management api is accessible via `ManagementApi` and required management api key that you can obtain in api key section in DecisionRules app.


Data for ruleflow import methods are represented as an array where index0 = RF, and index1...indexn are DTs

```python
async def management_api_test():
    manager = decisionrules.ManagementApi(mng_key)

    #Or with custom domain

    manager = decisionrules.ManagementApi(mng_key, decisionrules.CustomDomain("YOUR_URL", decisionrules.Protocols.HTTPS))
```

## 2.1 Management API usage example

```python
async def management_api_test():
    manager = decisionrules.ManagementApi(mng_key)

    await manager.get_rule(get_rule)
    await manager.get_rule(get_rule, "1")
    await manager.get_space(get_space)

    await manager.update_rule(put_rule, "1", put_data)
    await manager.create_rule(post_rule, post_data)
    await manager.delete_rule(delete_rule, "1")

    await manager.create_ruleflow(new_ruleflow)
    await manager.get_ruleflow(id)
    await manager.get_ruleflow(id, 1)
    await manager.update_ruleflow(id, 1, ruleflow)
    await manager.export_ruleflow(id, 1)
    await manager.export_ruleflow(id)
    await manager.import_ruleflow([new_ruleflow_with_dt], 1,)
    await manager.import_ruleflow(id, 1, [new_ruleflow_with_dt])
    await manager.import_ruleflow([new_ruleflow_with_dt])
    await manager.delele_ruleflow(id)

    await manager.getItems(tags)
    await manager.updateTags(ruleId, data, version)
    await manager.delete(ruleId, version)

```

## 2.3 All available methods in management API