Metadata-Version: 2.1
Name: ODWC
Version: 1.0rc4
Summary: Open Driver Waypoint Coordinator
Home-page: https://github.com/Ewpratten/ODWC
Author: Evan Pratten
Author-email: ewpratten@gmail.com
License: GPLv3
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Development Status :: 5 - Production/Stable
Description-Content-Type: text/markdown
Requires-Dist: requests
Requires-Dist: scipy

# Open Driver Waypoint Coordinator

## Installation
This is a python3 library, so make sure to use pip for python3
```sh
python3 -m pip install ODWC
```

In your python project, include the library as follows:
```python3
import ODWC as odwc
```

Now, set your [Google maps api](https://developers.google.com/maps/documentation/javascript/get-api-key) key:
```python3
odwc.key = "<your key here>"
```

## Usage
First, create a `Coordinator` (aka. router):
```python3
router = odwc.Coordinator(students, drivers)
```
The `Coordinator` constructor takes a list of students and a list of drivers. These are described in the **Data Types** section below.

Next, calculate the schedules.
```python3
schedules = router.calculate()
```
THis will return a dictionary with the names of the drivers as keys and their schedules as a list for the value.

A key with the name `failed` will also be returned. This may contain a list of `Student` objects (described below). These are the students that could not be automatically scheduled and require manual scheduling.

## Data Types
These are the various types and formats that are used.

### Student
`Student` is a class that contains info about each student. These are only returned. **DO NOT** pass them in to the `Coordinator`. They contain the following values:
```python3
pickup: str
dropoff: str
time: float
```

To convert the time to a human-readable time, use the `floatToTime()` function and pass in the time.

### Student list
When passing in a list of students, use the following structure:
```python3
[
	{
	"pickup":"<address>",
	"dropoff":"<address>",
	"time":"<24 hour time>"
	},
	...
]
```

Here is an example:
```python3
[
	{
	"pickup":"525 Dundas St, London, ON N6B 1W5",
	"dropoff":"450 Dundas St, London, ON N6B 3K3",
	"time":"15:00"
	}
]
```

### Driver list
Passing in a list of drivers works in a similar way.
```python3
[
	{
	"name":"<Unique name>",
	"location":"<Starting location of the car>"
	},
	...
]
```

Here is an example:
```python3
[
	{
	"name":"driver 1",
	"location":"600 Oxford St E, London, ON N5Y 3J1"
	}
]

