Add ticket list REST API

Change-Id: I633889a1451a7283362121e092e8133b31e89053
This commit is contained in:
lawrancejing 2015-11-10 09:58:21 +00:00
parent 43815d26a4
commit 7137e71b3e
6 changed files with 62 additions and 4 deletions

View File

@ -26,3 +26,9 @@ class Controller(rest.RestController):
name=kwargs['name'])
return ticket
@pecan.expose('json')
def get_all(self):
tickets = pecan.request.rpcapi.ticket_list()
return tickets

View File

@ -54,3 +54,14 @@ class EvoqueException(Exception):
class ConfigInvalid(EvoqueException):
message = _("Invalid configuration file. %(error_msg)s")
class Invalid(EvoqueException):
message = _("Unacceptable parameters.")
code = 400
# Cannot be templated as the error syntax varies.
# msg needs to be constructed when raised.
class InvalidParameterValue(Invalid):
message = _("%(err)s")

View File

@ -39,6 +39,12 @@ def ticket_create(context, values):
return IMPL.ticket_create(context, values)
def ticket_get_all(context, filters=None, limit=None, marker=None,
sort_key=None, sort_dir=None):
return IMPL.ticket_get_all(context, filters=None, limit=None, marker=None,
sort_key=None, sort_dir=None)
# Utils
def db_sync(engine, version=None):
"""Migrate the database to `version` or the most recent version."""

View File

@ -17,8 +17,12 @@ Implementation of SQLAlchemy backend.
import sys
from oslo_config import cfg
from oslo_db import exception as db_exc
from oslo_db.sqlalchemy import session as db_session
from oslo_db.sqlalchemy import utils as db_utils
from evoque.common import exceptions
from evoque.common.i18n import _
from evoque.db.sqlalchemy import migration
from evoque.db.sqlalchemy import models
@ -43,14 +47,31 @@ def get_backend():
return sys.modules[__name__]
def model_query(context, *args):
def _session():
return get_session()
def model_query(model, *args):
session = _session()
query = session.query(*args)
query = session.query(model, *args)
return query
def _session():
return get_session()
def _paginate_query(model, limit=None, marker=None, sort_key=None,
sort_dir=None, query=None):
if not query:
query = model_query(model)
sort_keys = ['id']
if sort_key and sort_key not in sort_keys:
sort_keys.insert(0, sort_key)
try:
query = db_utils.paginate_query(query, model, limit, sort_keys,
marker=marker, sort_dir=sort_dir)
except db_exc.InvalidSortKey:
raise exceptions.InvalidParameterValue(
_('The sort_key value "%(key)s" is an invalid field for sorting')
% {'key': sort_key})
return query.all()
# Tickets
@ -61,6 +82,13 @@ def ticket_create(context, values):
return ticket_ref
def ticket_get_all(context, filters=None, limit=None, marker=None,
sort_key=None, sort_dir=None):
query = model_query(models.Ticket)
return _paginate_query(models.Ticket, limit, marker,
sort_key, sort_dir, query)
# Utils
def db_sync(engine, version=None):
"""Migrate the database to `version` or the most recent version."""

View File

@ -20,3 +20,6 @@ class API(rpc_service.API):
def ticket_create(self, name):
return self._call('ticket_create', name=name)
def ticket_list(self):
return self._call('ticket_list')

View File

@ -22,3 +22,7 @@ class Handler(object):
values = {'name': name}
ticket = db_api.ticket_create(context, values)
return {'ticket': ticket}
def ticket_list(self, context):
tickets = db_api.ticket_get_all(context)
return {'tickets': tickets}