Source code for db2rest.rest

from db2rest.renderer import Renderer
import db2rest.helpers as helpers
from db2rest.exceptions import MethodNotAllowed


[docs]class RestAPI(object): def __init__(self, db_adapter): self.db_adapter = db_adapter self.renderer = Renderer() self.views = dict((v.name, v) for v in views)
[docs] def post(self, request, params): view = self.views.get(params['view']) row_id = view(self.db_adapter, request, params).create() response = helpers.create_response(request, row_id) return self.renderer(view, request, row_id, response)
[docs] def get(self, request, params): view = self.views.get(params['view']) data = view(self.db_adapter, request, params).get() return self.renderer(view, request, data)
[docs] def delete(self, request, params): view = self.views.get(params['view']) data = view(self.db_adapter, request, params).delete() response = helpers.delete_response(request) return self.renderer(view, request, data, response)
[docs] def put(self, request, params): view = self.views.get(params['view']) row = view(self.db_adapter, request, params).update() response = helpers.update_response(request, row) return self.renderer(view, request, row, response)
[docs]class View(object): def __init__(self, db_adapter, req, params): self.db_adapter = db_adapter self.request = req self.params = params
[docs]class Table(View): name = 'Table' valid_methods = ['get', 'post'] template_name = "Table" def _create(self): table_name = helpers.extract_table_name(self.request) values = dict(self.request.values.items()) return self.db_adapter.add_row(table_name, values)
[docs] def create_json(self): """Extracts the values from the json request and create the resource. """ return self._create()
[docs] def create_html(self): """Extract the values from the html request and create the resource. """ return self._create()
def __getattribute__(self, name): if name in ["create", "get"]: request = object.__getattribute__(self, 'request') ext = helpers.extract_file_ext(request) name = "_".join((name, ext)) return object.__getattribute__(self, name) def _get(self): table = self.request.path[1:] headers = self.db_adapter.get_headers(table) rows = self.db_adapter.get_rows(table) return table, headers, rows
[docs] def get_json(self): table, headers, rows = self._get() rows = [dict(zip(headers, row)) for row in rows] return {table: rows}
[docs] def get_html(self): table, headers, rows = self._get() return dict(headers=headers, rows=rows, table=table)
[docs]class Tables(View): name = 'Tables' valid_methods = ['get'] template_name = "Tables"
[docs] def get(self): return dict(tables=self.db_adapter.get_tables())
[docs] def create(self): raise MethodNotAllowed(description="This is a readonly view", valid_methods=self.valid_methods, method='post')
[docs]class Row(Table): name = 'Row' valid_methods = ['get', 'put', 'delete'] template_name = "Table" def _get(self): table, row_id = helpers.extract_table_row_id(self.request.path) headers = self.db_adapter.get_headers(table) rows = self.db_adapter.get_row(table, row_id) return table, headers, rows
[docs] def update(self): table, row_id = helpers.extract_table_row_id(self.request.path) values = dict(self.request.values.items()) return self.db_adapter.update_row(table, row_id, values)
[docs] def delete(self): table, row_id = helpers.extract_table_row_id(self.request.path) return self.db_adapter.delete_row(table, row_id)
views = [Table, Tables, Row]