Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/paulocheque/tornado-rest-handler
A simple Python Tornado handler that manage Rest requests automatically
https://github.com/paulocheque/tornado-rest-handler
Last synced: 17 days ago
JSON representation
A simple Python Tornado handler that manage Rest requests automatically
- Host: GitHub
- URL: https://github.com/paulocheque/tornado-rest-handler
- Owner: paulocheque
- License: other
- Created: 2013-03-30T04:48:29.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2013-05-03T21:04:59.000Z (over 11 years ago)
- Last Synced: 2024-12-02T07:55:57.224Z (25 days ago)
- Language: Python
- Size: 445 KB
- Stars: 128
- Watchers: 7
- Forks: 22
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
tornado-rest-handler
====================![Continuous Integration Status](https://secure.travis-ci.org/paulocheque/tornado-rest-handler.png)
#### Latest version: 0.0.7 (2013/04/28)
A simple Python Tornado handler that manage Rest requests automatically.
From now on (0.0.6+ release), Tornado Rest Handler uses the **Python Rest Handler** library (https://github.com/paulocheque/python-rest-handler). All complexity of the code was move to that library.
* [Basic Example of Usage](#basic-example-of-usage)
* [Routes](#routes)
* [Handlers](#handlers)
* [Data Managers](#data-managers)
* [Templates](#templates)
* [Plugins](#plugins)
* [Installation](#installation)
* [Change Log](#change-log)
* [TODO](#todo)Basic Example of Usage
------------------------In the current implementation, there is only one handler for MongoEngine ORM, besides the library does not depends on the MongoEngine!
With +-10 lines of code you can create a handler for your ORM.
Routes
------------------------One handler manage every Rest routes:
| Method | Route | Comment |
|------------- |---------------------|---------|
| GET | /animal index | display a list of all animals |
| GET | /animal/new | new return an HTML form for creating a new animal |
| POST | /animal | create a new animal |
| GET | /animal/:id | show an animal |
| GET | /animal/:id/edit | return an HTML form for editing a photo |
| PUT | /animal/:id | update an animal data |
| DELETE | /animal/:id | delete an animal |
| POST* | /animals/:id/delete | same as DELETE /animals/:id |
| POST* | /animals/:id | same as PUT /animals/:id |* *Since HTML5-forms does not support PUT/DELETE, these additional POSTs were added.
* To specify Tornado Rest routes you can use the method **rest_routes**:
```python
from tornado_rest_handler import routes, rest_routesTORNADO_ROUTES = [
# another handlers hererest_routes(Animal),
# another handlers here
]TORNADO_SETTINGS = {}
application = tornado.web.Application(routes(TORNADO_ROUTES), **TORNADO_SETTINGS)
```The library does not support auto-pluralization yet, so you may want to change the prefix:
```python
rest_routes(Animal, prefix='animals'),
```You can also define to where will be redirect after an action succeed:
```python
rest_routes(Animal, prefix='animals', redirect_pos_action='/animals'),
```Handlers
------------------------All the get/post/put/delete methods are implemented for you, but if you want to customize some behavior, you write your own handler:
```python
from tornado_rest_handler import TornadoRestHandlerclass AnimalHandler(TornadoRestHandler):
pass # your custom methods here
```And then, registered it:
```python
rest_routes(Animal, handler=AnimalHandler),
```It is possible to create only some routes/actions. You can use the
only
andexclude
attributes for this. The available routes and actions are:new
,show
,list
,edit
anddelete
.```python
rest_routes(Animal, handler=AnimalHandler, only=['new', 'edit', 'show', 'list']),# or
rest_routes(Animal, handler=AnimalHandler, exclude=['delete']),
```Data Managers
------------------------To create a RestHandler for your ORM you must override the DataManager class and implement the following methods:
```python
from python_rest_handler import DataManagerclass CouchDBDataManager(DataManager):
def instance_list(self): return []
def find_instance_by_id(self, instance_id): pass
def save_instance(self, data): pass
def update_instance(self, instance, data): pass
def delete_instance(self, instance): passclass YourTornadoRestHandler(TornadoRestHandler):
data_manager = CouchDBDataManager
```Check the **Python Rest Handler** library (https://github.com/paulocheque/python-rest-handler) for more details.
Templates
------------------------You must create your own template. Templates will receive the variables **obj** or **objs** and **alert** in case there is some message. The edit template will also receive the variable **errors** and functions **value_for**, **error_for** and **has_error**.
It must have the names list.html, show.html and edit.html. But you can customize if you want to:
```python
rest_routes(Animal, list_template='another_name.html', edit_template='...', show_template='...'),
```By default, the directory is the model name in lower case (animal in this example).
* animal/list.html
* animal/show.html
* animal/edit.htmlBut you may change the directory though:
```python
rest_routes(Animal, template_path='your_template_path'),
```Plugins
------------You can pass additional functions to your templates. This library include functions that generate widgets according to a Twitter-Bootstrap template.
To apply to all Rest Handlers:
```python
from tornado_rest_handler import *activate_plugin('bootstrap')
```Or to apply to one specific Rest Handler:
```python
from python_rest_handler.plugins.bootstrap import *extra_attributes = {'bs_input_text': bs_input_text,
'bs_input_password':bs_input_password,
'bs_select_field':bs_select_field,
'bs_button':bs_button}rest_routes(Animal, extra_attributes=extra_attributes),
```Installation
------------```
pip install tornado-rest-handler
```#### or
```
1. Download zip file
2. Extract it
3. Execute in the extracted directory: python setup.py install
```#### Development version
```
pip install -e [email protected]:paulocheque/tornado-rest-handler.git#egg=tornado-rest-handler
```#### requirements.txt
```
tornado-rest-handler==0.0.7
# or use the development version
git+git://github.com/paulocheque/tornado-rest-handler.git#egg=tornado-rest-handler
```#### Upgrade:
```
pip install tornado-rest-handler --upgrade --no-deps
```#### Requirements
* Python 2.6 / 2.7 / 3.2 / 3.3
* Tested with Tornado 2.4.1 and 3.0Change Log
-------------#### 0.0.7 (2013/04/28)
* [new] Using Python-Rest-Handler 0.0.2. All the new stuff of its version is applied to Tornado Rest Handler.
#### 0.0.6 (2013/04/07)
* [new] This library from now will use the python-rest-handler library.
* [new] Plugin system that enable send more functions to the templates.#### 0.0.5 (2013/04/01) (no lie!)
* [new] Python3 is now supported
* [test] Tested with Tornado 3.0 (compatible)#### 0.0.4 (2013/03/31)
* [new] Passed validation errors (dict errors) to the edit template.
* [new] New functions passed to edit template: has_errors, value_for and error_for.
* [bugfix] Fixed bug that cause strange behavior when occurs validation errors.#### 0.0.3 (2013/03/31)
* [new] CrudHandler extracted from RestHandler.
* [new] Dynamic handlers with dynamic routes (rest_routes function).
* [new] New redirect_pos_action attribute.
* [new] Function routes added to facilitate routes integration.
* [new] Method raise403 useful method in the handler.
* [update] All attributes are now in lower case.
* [update] Stronger uri discover algoritihm.
* [update] Using only AssertionError exceptions.
* [bugfix] Using redirects instead of rendering after actions.#### 0.0.2 (2013/03/30)
* [update] RestHandler adapted to be used for other ORMs.
* [new] MongoEngineRestHandler
* [new] Template customization: LIST_TEMPLATE, EDIT_TEMPLATE, SHOW_TEMPLATE variables.
* [update] Using OO instead of metaclasses for object list.
* [update] Better exception to alert bad implementations.
* [tests] Initial unit tests.#### 0.0.1 (2013/03/30)
* [new] RestHandler for MongoEngine
TODO
-------------* Handlers for another ORMs (other than MongoEngine).
* Check Python-Rest-Handler TODO other stuff