Project status (opened / closed)

This commit is contained in:
Julien Duponchelle committed 2016-06-15 16:26:16 +02:00
1 parent 0569480953
commit 524f8991bc
5 files changed
+40 -8

No files matched your search

+22 -3
View File
@@ -89,6 +89,23 @@ class Controller:
for c in data["computes"]:
yield from self.add_compute(**c)
# Preload the list of projects from disk
server_config = Config.instance().get_section_config("Server")
projects_path = os.path.expanduser(server_config.get("projects_path", "~/GNS3/projects"))
try:
for project_path in os.listdir(projects_path):
project_dir = os.path.join(projects_path, project_path)
if os.path.isdir(project_dir):
for file in os.listdir(project_dir):
if file.endswith(".gns3"):
try:
yield from self.load_project(os.path.join(project_dir, file), load=False)
except aiohttp.web_exceptions.HTTPConflict:
pass # Skip not compatible projects
except OSError as e:
log.error(str(e))
def is_enabled(self):
"""
:returns: whether the current instance is the controller
@@ -187,11 +204,12 @@ class Controller:
del self._projects[project.id]
@asyncio.coroutine
def load_project(self, path):
def load_project(self, path, load=True):
"""
Load a project from a .gns3
:param path: Path of the .gns3
:param load: Load the topology
"""
topo_data = load_topology(path)
topology = topo_data.pop("topology")
@@ -199,8 +217,9 @@ class Controller:
topo_data.pop("revision")
topo_data.pop("type")
project = yield from self.add_project(path=os.path.dirname(path), **topo_data)
yield from project.load()
project = yield from self.add_project(path=os.path.dirname(path), status="closed", **topo_data)
if load:
yield from project.load()
@property
def projects(self):
+9 -2
View File
@@ -40,12 +40,14 @@ class Project:
:param project_id: force project identifier (None by default auto generate an UUID)
:param path: path of the project. (None use the standard directory)
:param status: Status of the project (opened / closed)
"""
def __init__(self, name=None, project_id=None, path=None, controller=None):
def __init__(self, name=None, project_id=None, path=None, controller=None, status="opened"):
self._controller = controller
self._name = name
self._status = status
if project_id is None:
self._id = str(uuid4())
else:
@@ -82,6 +84,10 @@ class Project:
def path(self):
return self._path
@property
def status(self):
return self._status
@path.setter
def path(self, path):
check_path_allowed(path)
@@ -355,5 +361,6 @@ class Project:
return {
"name": self._name,
"project_id": self._id,
"path": self._path
"path": self._path,
"status": "opened"
}