Add ticket list REST API
Change-Id: I633889a1451a7283362121e092e8133b31e89053
This commit is contained in:
parent
43815d26a4
commit
7137e71b3e
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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."""
|
||||
|
|
|
@ -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."""
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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}
|
||||
|
|
Loading…
Reference in New Issue