(2014/05/21 18:12), Satoshi Kobayashi wrote: > > Signed-off-by: Satoshi Kobayashi <[email protected]> > --- > ryu/app/rest_topology.py | 74 > +++++++++++++++++++++------------------------- > 1 files changed, 34 insertions(+), 40 deletions(-) > > diff --git a/ryu/app/rest_topology.py b/ryu/app/rest_topology.py > index 82a1755..5eed243 100644 > --- a/ryu/app/rest_topology.py > +++ b/ryu/app/rest_topology.py > @@ -16,10 +16,9 @@ > import json > from webob import Response > > -from ryu.app.wsgi import ControllerBase, WSGIApplication > +from ryu.app.wsgi import ControllerBase, WSGIApplication, route > from ryu.base import app_manager > from ryu.lib import dpid as dpid_lib > -from ryu.lib import port_no as port_no_lib > from ryu.topology.api import get_switch, get_link > > # REST API for switch configuration > @@ -40,12 +39,44 @@ from ryu.topology.api import get_switch, get_link > # <dpid>: datapath id in 16 hex > > > +class TopologyAPI(app_manager.RyuApp): > + _CONTEXTS = { > + 'wsgi': WSGIApplication > + } > + > + def __init__(self, *args, **kwargs): > + super(TopologyAPI, self).__init__(*args, **kwargs) > + > + wsgi = kwargs['wsgi'] > + wsgi.register(TopologyController, {'topology_api_app': self}) > + > + > class TopologyController(ControllerBase): > def __init__(self, req, link, data, **config): > super(TopologyController, self).__init__(req, link, data, **config) > self.topology_api_app = data['topology_api_app'] > > + @route('topology', '/v1.0/topology/switches', > + methods=['GET']) > def list_switches(self, req, **kwargs): > + return self._switches(req, **kwargs) > + > + @route('topology', '/v1.0/topology/switches/{dpid}', > + methods=['GET'], requirements={'dpid': dpid_lib.DPID_PATTERN}) > + def get_switch(self, req, **kwargs): > + return self._switches(req, **kwargs) > + > + @route('topology', '/v1.0/topology/links', > + methods=['GET']) > + def list_links(self, req, **kwargs): > + return self._links(req, **kwargs) > + > + @route('topology', '/v1.0/topology/links/{dpid}', > + methods=['GET'], requirements={'dpid': dpid_lib.DPID_PATTERN}) > + def get_links(self, req, **kwargs): > + return self._links(req, **kwargs) > + > + def _switches(self, req, **kwargs): > dpid = None > if 'dpid' in kwargs: > dpid = dpid_lib.str_to_dpid(kwargs['dpid']) > @@ -53,47 +84,10 @@ class TopologyController(ControllerBase): > body = json.dumps([switch.to_dict() for switch in switches]) > return Response(content_type='application/json', body=body) > > - def list_links(self, req, **kwargs): > + def _links(self, req, **kwargs): > dpid = None > if 'dpid' in kwargs: > dpid = dpid_lib.str_to_dpid(kwargs['dpid']) > links = get_link(self.topology_api_app, dpid) > body = json.dumps([link.to_dict() for link in links]) > return Response(content_type='application/json', body=body) > - > - > -class TopologyAPI(app_manager.RyuApp): > - _CONTEXTS = { > - 'wsgi': WSGIApplication > - } > - > - def __init__(self, *args, **kwargs): > - super(TopologyAPI, self).__init__(*args, **kwargs) > - wsgi = kwargs['wsgi'] > - mapper = wsgi.mapper > - > - controller = TopologyController > - wsgi.registory[controller.__name__] = {'topology_api_app': self} > - route_name = 'topology' > - > - uri = '/v1.0/topology/switches' > - mapper.connect(route_name, uri, controller=controller, > - action='list_switches', > - conditions=dict(method=['GET'])) > - > - uri = '/v1.0/topology/switches/{dpid}' > - requirements = {'dpid': dpid_lib.DPID_PATTERN} > - s = mapper.submapper(controller=controller, > requirements=requirements) > - s.connect(route_name, uri, action='list_switches', > - conditions=dict(method=['GET'])) > - > - uri = '/v1.0/topology/links' > - mapper.connect(route_name, uri, controller=controller, > - action='list_links', > - conditions=dict(method=['GET'])) > - > - uri = '/v1.0/topology/links/{dpid}' > - requirements = {'dpid': dpid_lib.DPID_PATTERN} > - s = mapper.submapper(controller=controller, > requirements=requirements) > - s.connect(route_name, uri, action='list_links', > - conditions=dict(method=['GET'])) >
Looks good to me. ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
