This commit is contained in:
Julien Duponchelle committed 2016-03-07 17:57:12 +01:00
1 parent 664cec97ba
commit b2ce7ee8d7
200 files changed
+867 -625

No files matched your search

+2 -21
View File
@@ -14,30 +14,11 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import os
from gns3server.handlers.upload_handler import UploadHandler
from gns3server.handlers.index_handler import IndexHandler
from gns3server.handlers.api.version_handler import VersionHandler
from gns3server.handlers.api.controller import *
from gns3server.handlers.api.hypervisor import *
# TODO: Do not load if controller is off
from gns3server.handlers.api.controller.server_handler import ServerHandler
from gns3server.handlers.api.hypervisor.network_handler import NetworkHandler
from gns3server.handlers.api.hypervisor.project_handler import ProjectHandler
from gns3server.handlers.api.hypervisor.dynamips_device_handler import DynamipsDeviceHandler
from gns3server.handlers.api.hypervisor.dynamips_vm_handler import DynamipsVMHandler
from gns3server.handlers.api.hypervisor.qemu_handler import QEMUHandler
from gns3server.handlers.api.hypervisor.virtualbox_handler import VirtualBoxHandler
from gns3server.handlers.api.hypervisor.docker_handler import DockerHandler
from gns3server.handlers.api.hypervisor.vpcs_handler import VPCSHandler
from gns3server.handlers.api.hypervisor.vmware_handler import VMwareHandler
from gns3server.handlers.api.hypervisor.config_handler import ConfigHandler
from gns3server.handlers.api.hypervisor.file_handler import FileHandler
if sys.platform.startswith("linux") or hasattr(sys, "_called_from_test") or os.environ.get("PYTEST_BUILD_DOCUMENTATION") == "1":
# IOU runs only on Linux but testsuite work on UNIX platform
if not sys.platform.startswith("win"):
from gns3server.handlers.api.hypervisor.iou_handler import IOUHandler
@@ -0,0 +1,21 @@
#!/usr/bin/env python
#
# Copyright (C) 2016 GNS3 Technologies Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from .server_handler import ServerHandler
from .version_handler import VersionHandler
@@ -52,7 +52,7 @@ class ServerHandler:
@classmethod
@Route.post(
r"/server/shutdown",
r"/servers/shutdown",
description="Shutdown the local server",
status_codes={
201: "Server is shutting down",
@@ -15,10 +15,10 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from ...web.route import Route
from ...config import Config
from ...schemas.version import VERSION_SCHEMA
from ...version import __version__
from ....web.route import Route
from ....config import Config
from ....schemas.version import VERSION_SCHEMA
from ....version import __version__
from aiohttp.web import HTTPConflict
@@ -0,0 +1,40 @@
#!/usr/bin/env python
#
# Copyright (C) 2016 GNS3 Technologies Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import sys
import os
from .network_handler import NetworkHandler
from .project_handler import ProjectHandler
from .dynamips_device_handler import DynamipsDeviceHandler
from .dynamips_vm_handler import DynamipsVMHandler
from .qemu_handler import QEMUHandler
from .virtualbox_handler import VirtualBoxHandler
from .vpcs_handler import VPCSHandler
from .vmware_handler import VMwareHandler
from .config_handler import ConfigHandler
from .file_handler import FileHandler
from .version_handler import VersionHandler
if sys.platform.startswith("linux") or hasattr(sys, "_called_from_test") or os.environ.get("PYTEST_BUILD_DOCUMENTATION") == "1":
# IOU runs only on Linux but testsuite work on UNIX platform
if not sys.platform.startswith("win"):
from .iou_handler import IOUHandler
from .docker_handler import DockerHandler
@@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2015 GNS3 Technologies Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from ....web.route import Route
from ....config import Config
from ....schemas.version import VERSION_SCHEMA
from ....version import __version__
from aiohttp.web import HTTPConflict
class VersionHandler:
@classmethod
@Route.get(
r"/version",
description="Retrieve the server version number",
output=VERSION_SCHEMA)
def version(request, response):
config = Config.instance()
local_server = config.get_section_config("Server").getboolean("local", False)
response.json({"version": __version__, "local": local_server})
@classmethod
@Route.post(
r"/version",
description="Check if version is the same as the server",
output=VERSION_SCHEMA,
input=VERSION_SCHEMA,
status_codes={
200: "Same version",
409: "Invalid version"
})
def check_version(request, response):
if request.json["version"] != __version__:
raise HTTPConflict(text="Client version {} differs with server version {}".format(request.json["version"], __version__))
response.json({"version": __version__})
+10 -14
View File
@@ -39,16 +39,22 @@ class Documentation(object):
self.write_documentation("hypervisor")
# Controller documentation
self.write_documentation("controller")
# Write doc common to both
self.write_documentation("common")
def write_documentation(self, doc_type):
"""
Build all the doc page for handlers
:param doc_type: Type of doc to generate (controller, hypervisor or common)
:param doc_type: Type of doc to generate (controller, hypervisor)
"""
for handler_name in sorted(self._documentation):
if "controller." in handler_name:
server_type = "controller"
elif "hypervisor." in handler_name:
server_type = "hypervisor"
if doc_type != server_type:
continue
print("Build {}".format(handler_name))
for path in sorted(self._documentation[handler_name]):
@@ -57,16 +63,6 @@ class Documentation(object):
if api_version is None:
continue
if "controller." in handler_name:
server_type = "controller"
elif "hypervisor." in handler_name:
server_type = "hypervisor"
else:
server_type = "common"
if doc_type != server_type:
continue
filename = self._file_path(path)
handler_doc = self._documentation[handler_name][path]
handler = handler_name.replace(server_type + ".", "")
@@ -126,7 +122,7 @@ class Documentation(object):
def _file_path(self, path):
path = path.replace("hypervisor", "")
path = path.replace("controller", "")
return re.sub("^v1", "", re.sub("[^a-z0-9]", "", path))
return re.sub("^v2", "", re.sub("[^a-z0-9]", "", path))
def _write_definitions(self, f, schema):
if "definitions" in schema:
+1 -3
View File
@@ -120,7 +120,7 @@ class Route(object):
# This block is executed only the first time
output_schema = kw.get("output", {})
input_schema = kw.get("input", {})
api_version = kw.get("api_version", 1)
api_version = kw.get("api_version", 2)
raw = kw.get("raw", False)
def register(func):
@@ -129,8 +129,6 @@ class Route(object):
route = "/v{version}/controller{path}".format(path=path, version=api_version)
elif "hypervisor" in func.__module__:
route = "/v{version}/hypervisor{path}".format(path=path, version=api_version)
elif "handlers.api" in func.__module__:
route = "/v{version}{path}".format(path=path, version=api_version)
else:
route = path