<a id="top"></a>
<br />

<div align="center">
  <h1>Usernado</h1>
  <p align="center">
    A Tornado Extension to Make Life Easier.
    <br />
    <a href="#"><strong>Explore the docs »</strong></a>
    <br />
    <br />
    <a href="https://github.com/reganto/Usernado/tree/master/example">View Demo</a>
    ·
    <a href="https://github.com/reganto/Usernado/issues">Report Bug</a>
    ·
    <a href="https://github.com/reganto/Usernado/issues">Request Feature</a>
  </p>
</div>

<!-- TABLE OF CONTENTS -->

<details>
  <summary>Table of Contents</summary>
  <ol>
    <li><a href="#why-usernado">Why Usernado</a></li>
    <li>
      <a href="#getting-started">Getting Started</a>
      <ul>
        <li><a href="#features">Features</a></li>
        <li><a href="#installation">Installation</a></li>
      </ul>
    </li>
    <li>
      <a href="#usage">Usage</a>
      <ul>
        <li><a href="#example">Example</a></li>
        <li><a href="#resources">Resources</a></li>
      </ul>
    </li>
    <li><a href="#roadmap">Roadmap</a></li>
    <li><a href="#license">License</a></li>
    <li><a href="#contact">Contact</a></li>
  </ol>
</details>

<!-- Why Userndo  -->

## Why Usernado

I use Tornado every day. I really like it. But as you know, Tornado is not a full-stack framework, and I had to put all the pieces of the puzzle together every day! This may be interesting for the first and second time, but it will get annoying over time. So I tried to make a extension and use it whenever I wanted.

This is how the Usernado was born.


<!-- Getting Started -->

## Getting Started

### Features

- REST support

- Websocket easier than ever

- ORM agnostic authentication

- Humanize datetime in templates

- Better exception printer thanks to [tornado-debugger](https://github.com/bhch/tornado-debugger)

### Installation

Install it via pip:

```bash
pip install usernado
```

<!-- USAGE EXAMPLES -->

## Usage

### Example

Check it out [here](https://github.com/reganto/Usernado/tree/master/example).

### Resources

- [Documentation](#)

- [PyPI](https://pypi.org/project/usernado/)

- [Change Log](https://github.com/reganto/Usernado/blob/master/CHANGES.md)

<!-- ROADMAP -->

## Roadmap

- [x] Send and broadcast for websockets
- [x] Abstracted authentication methods
- [x] Authenticaion methods should return True/False
- [x] Add diff_for_human (humanize) decorator
- [ ] Add username & password to test login 
- [ ] Add pluralize (str_plural) uimodule
- [ ] Add third party authentication abstract methods
- [ ] Add pagination

See the [open issues](https://github.com/reganto/Usernado/issues) for a full list of proposed features (and known issues).

<!-- LICENSE -->

## License

Distributed under the Apache License. See `LICENSE.txt` for more information.

<!-- CONTACT -->

## Contact

Project Link: [https://github.com/reganto/Usernado](https://github.com/reganto/Usernado)

Email: [tell.reganto](mailto:tell.reganto@gmail.com)

<p align="right">(<a href="#top">back to top</a>)</p>
