mirror of
https://github.com/GNS3/gns3-server.git
synced 2026-11-03 05:51:15 +02:00
Some cleaning.
This commit is contained in:
1 parent
bad3ef7003
commit
44074ff7c9
22 files changed
+122
-99
No files matched your search
@@ -17,14 +17,15 @@
|
||||
|
||||
import copy
|
||||
import uuid
|
||||
|
||||
import logging
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Appliance:
|
||||
|
||||
def __init__(self, appliance_id, data, builtin=True):
|
||||
|
||||
if appliance_id is None:
|
||||
self._id = str(uuid.uuid4())
|
||||
elif isinstance(appliance_id, uuid.UUID):
|
||||
|
||||
@@ -390,7 +390,6 @@ class Node:
|
||||
data["node_id"] = self._id
|
||||
if self._node_type == "docker":
|
||||
timeout = None
|
||||
|
||||
else:
|
||||
timeout = 1200
|
||||
trial = 0
|
||||
@@ -543,7 +542,7 @@ class Node:
|
||||
if self.custom_adapters:
|
||||
data["custom_adapters"] = self.custom_adapters
|
||||
|
||||
# None properties are not be send. Because it can mean the emulator doesn't support it
|
||||
# None properties are not be sent because it can mean the emulator doesn't support it
|
||||
for key in list(data.keys()):
|
||||
if data[key] is None or data[key] is {} or key in self.CONTROLLER_ONLY_PROPERTIES:
|
||||
del data[key]
|
||||
@@ -628,7 +627,7 @@ class Node:
|
||||
|
||||
async def put(self, path, data=None, **kwargs):
|
||||
"""
|
||||
HTTP post on the node
|
||||
HTTP put on the node
|
||||
"""
|
||||
if path is None:
|
||||
path = f"/projects/{self._project.id}/{self._node_type}/nodes/{self._id}"
|
||||
@@ -780,11 +779,10 @@ class Node:
|
||||
|
||||
def __json__(self, topology_dump=False):
|
||||
"""
|
||||
:param topology_dump: Filter to keep only properties require for saving on disk
|
||||
:param topology_dump: Filter to keep only properties required for saving on disk
|
||||
"""
|
||||
|
||||
if topology_dump:
|
||||
return {
|
||||
topology = {
|
||||
"compute_id": str(self._compute.id),
|
||||
"node_id": self._id,
|
||||
"node_type": self._node_type,
|
||||
@@ -808,35 +806,18 @@ class Node:
|
||||
"port_segment_size": self._port_segment_size,
|
||||
"first_port_name": self._first_port_name,
|
||||
"custom_adapters": self._custom_adapters,
|
||||
}
|
||||
return {
|
||||
"compute_id": str(self._compute.id),
|
||||
"project_id": self._project.id,
|
||||
"node_id": self._id,
|
||||
"template_id": self._template_id,
|
||||
"node_type": self._node_type,
|
||||
"node_directory": self._node_directory,
|
||||
"name": self._name,
|
||||
"console": self._console,
|
||||
"console_host": str(self._compute.console_host),
|
||||
"console_type": self._console_type,
|
||||
"aux": self._aux,
|
||||
"aux_type": self._aux_type,
|
||||
"console_auto_start": self._console_auto_start,
|
||||
"command_line": self._command_line,
|
||||
"properties": self._properties,
|
||||
"status": self._status,
|
||||
"label": self._label,
|
||||
"x": self._x,
|
||||
"y": self._y,
|
||||
"z": self._z,
|
||||
"locked": self._locked,
|
||||
"width": self._width,
|
||||
"height": self._height,
|
||||
"symbol": self._symbol,
|
||||
"port_name_format": self._port_name_format,
|
||||
"port_segment_size": self._port_segment_size,
|
||||
"first_port_name": self._first_port_name,
|
||||
"custom_adapters": self._custom_adapters,
|
||||
"ports": [port.__json__() for port in self.ports],
|
||||
}
|
||||
|
||||
if topology_dump:
|
||||
return topology
|
||||
|
||||
additional_data = {
|
||||
"project_id": self._project.id,
|
||||
"command_line": self._command_line,
|
||||
"status": self._status,
|
||||
"console_host": str(self._compute.console_host),
|
||||
"node_directory": self._node_directory,
|
||||
"ports": [port.__json__() for port in self.ports]
|
||||
}
|
||||
topology.update(additional_data)
|
||||
return topology
|
||||
@@ -28,6 +28,7 @@ class Notification:
|
||||
"""
|
||||
|
||||
def __init__(self, controller):
|
||||
|
||||
self._controller = controller
|
||||
self._project_listeners = {}
|
||||
self._controller_listeners = set()
|
||||
@@ -71,19 +72,6 @@ class Notification:
|
||||
:param event: Event to send
|
||||
"""
|
||||
|
||||
# If use in tests for documentation we save a sample
|
||||
if os.environ.get("PYTEST_BUILD_DOCUMENTATION") == "1":
|
||||
os.makedirs("docs/api/notifications", exist_ok=True)
|
||||
try:
|
||||
import json
|
||||
|
||||
data = json.dumps(event, indent=4, sort_keys=True)
|
||||
if "MagicMock" not in data:
|
||||
with open(os.path.join("docs/api/notifications", action + ".json"), "w+") as f:
|
||||
f.write(data)
|
||||
except TypeError: # If we receive a mock as an event it will raise TypeError when using json dump
|
||||
pass
|
||||
|
||||
for controller_listener in self._controller_listeners:
|
||||
controller_listener.put_nowait((action, event, {}))
|
||||
|
||||
@@ -127,19 +115,6 @@ class Notification:
|
||||
:param event: Event to send
|
||||
"""
|
||||
|
||||
# If use in tests for documentation we save a sample
|
||||
if os.environ.get("PYTEST_BUILD_DOCUMENTATION") == "1":
|
||||
os.makedirs("docs/api/notifications", exist_ok=True)
|
||||
try:
|
||||
import json
|
||||
|
||||
data = json.dumps(event, indent=4, sort_keys=True)
|
||||
if "MagicMock" not in data:
|
||||
with open(os.path.join("docs/api/notifications", action + ".json"), "w+") as f:
|
||||
f.write(data)
|
||||
except TypeError: # If we receive a mock as an event it will raise TypeError when using json dump
|
||||
pass
|
||||
|
||||
if "project_id" in event or project_id:
|
||||
self._send_event_to_project(event.get("project_id", project_id), action, event)
|
||||
else:
|
||||
|
||||
@@ -633,7 +633,7 @@ class Project:
|
||||
def _get_closed_data(self, section, id_key):
|
||||
"""
|
||||
Get the data for a project from the .gns3 when
|
||||
the project is close
|
||||
the project is closed
|
||||
|
||||
:param section: The section name in the .gns3
|
||||
:param id_key: The key for the element unique id
|
||||
@@ -1117,7 +1117,7 @@ class Project:
|
||||
try:
|
||||
topo = project_to_topology(self)
|
||||
path = self._topology_file()
|
||||
log.debug("Write %s", path)
|
||||
log.debug(f"Write topology file '{path}'")
|
||||
with open(path + ".tmp", "w+", encoding="utf-8") as f:
|
||||
json.dump(topo, f, indent=4, sort_keys=True)
|
||||
shutil.move(path + ".tmp", path)
|
||||
@@ -1176,6 +1176,7 @@ class Project:
|
||||
:param z: Z position
|
||||
:returns: New node
|
||||
"""
|
||||
|
||||
if node.status != "stopped" and not node.is_always_running():
|
||||
raise ControllerError("Cannot duplicate node data while the node is running")
|
||||
|
||||
|
||||
@@ -36,10 +36,6 @@ import logging
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# The string use to extract the date from the filename
|
||||
FILENAME_TIME_FORMAT = "%d%m%y_%H%M%S"
|
||||
|
||||
|
||||
class Snapshot:
|
||||
"""
|
||||
A snapshot object
|
||||
@@ -59,7 +55,7 @@ class Snapshot:
|
||||
filename = (
|
||||
self._name
|
||||
+ "_"
|
||||
+ datetime.utcfromtimestamp(self._created_at).replace(tzinfo=None).strftime(FILENAME_TIME_FORMAT)
|
||||
+ datetime.utcfromtimestamp(self._created_at).replace(tzinfo=None).strftime("%d%m%y_%H%M%S")
|
||||
+ ".gns3project"
|
||||
)
|
||||
else:
|
||||
@@ -67,7 +63,7 @@ class Snapshot:
|
||||
datestring = filename.replace(self._name + "_", "").split(".")[0]
|
||||
try:
|
||||
self._created_at = (
|
||||
datetime.strptime(datestring, FILENAME_TIME_FORMAT).replace(tzinfo=timezone.utc).timestamp()
|
||||
datetime.strptime(datestring, "%d%m%y_%H%M%S").replace(tzinfo=timezone.utc).timestamp()
|
||||
)
|
||||
except ValueError:
|
||||
self._created_at = datetime.utcnow().timestamp()
|
||||
|
||||
@@ -121,7 +121,8 @@ def load_topology(path):
|
||||
"""
|
||||
Open a topology file, patch it for last GNS3 release and return it
|
||||
"""
|
||||
log.debug("Read topology %s", path)
|
||||
|
||||
log.debug(f"Read topology {path}")
|
||||
try:
|
||||
with open(path, encoding="utf-8") as f:
|
||||
topo = json.load(f)
|
||||
|
||||
Reference in new issue
Block a user