Source code for populse_mia.data_manager.project_properties

# -*- coding: utf-8 -*-
"""Module that contains the class to handle the projects saved in the software.

Contains:
    Class:
    - SavedProjects

"""

##########################################################################
# Populse_mia - Copyright (C) IRMaGe/CEA, 2018
# Distributed under the terms of the CeCILL license, as published by
# the CEA-CNRS-INRIA. Refer to the LICENSE file or to
# http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html
# for details.
##########################################################################

import os

import yaml
from packaging import version

# Populse_MIA imports
from populse_mia.software_properties import Config


[docs] class SavedProjects: """Class that handles all the projects that have been saved in the software. .. Methods: - addSavedProject: adds a new saved project - loadSavedProjects: loads the dictionary from the saved_projects.yml file - removeSavedProject: removes a saved project from the config file - saveSavedProjects: saves the dictionary to the saved_projects.yml file """
[docs] def __init__(self): """Initialise the savedProjects attribute from the saved_projects.yml file. The pathsList attribute is initialised as the value corresponding to the "paths" key in the savedProjects dictionary. """ self.savedProjects = self.loadSavedProjects() if (isinstance(self.savedProjects, dict)) and ( "paths" in self.savedProjects ): self.pathsList = self.savedProjects["paths"] if self.pathsList is None: self.pathsList = [] else: self.savedProjects = {"paths": []} self.pathsList = []
[docs] def addSavedProject(self, newPath): """Add a new project to save in the savedProjects and pathsList attributes. Finally, save the savedProjects attribute in the saved_projects.yml file. :param newPath: new project's path to add :returns: the new path's list (pathsList attribute) """ if self.pathsList: if newPath not in self.pathsList: self.pathsList.insert(0, newPath) elif newPath != self.pathsList[0]: self.pathsList.remove(newPath) self.pathsList.insert(0, newPath) else: self.pathsList.insert(0, newPath) self.savedProjects["paths"] = self.pathsList self.saveSavedProjects() return self.pathsList
[docs] def loadSavedProjects(self): """Load the savedProjects dictionary from the saved_projects.yml file. If the saved_projects.yml file is not existing, it is created with the "{paths: []}" value and the returned dictionnary is {paths: []}. :returns: the dictionary """ config = Config() try: with open( os.path.join( config.get_properties_path(), "properties", "saved_projects.yml", ), "r", ) as stream: try: if version.parse(yaml.__version__) > version.parse("5.1"): return yaml.load(stream, Loader=yaml.FullLoader) else: return yaml.load(stream) except yaml.YAMLError as exc: print(exc) except FileNotFoundError: with open( os.path.join( config.get_properties_path(), "properties", "saved_projects.yml", ), "w", ) as stream: yaml.dump({"paths": []}, stream, default_flow_style=False) return {"paths": []}
[docs] def removeSavedProject(self, path): """Removes a saved project from the saved_projects.yml file. :param path: path of the saved project to remove """ if path in self.savedProjects["paths"]: self.savedProjects["paths"].remove(path) self.saveSavedProjects()
[docs] def saveSavedProjects(self): """Saves the savedProjects dictionary to the saved_projects.yml file.""" config = Config() with open( os.path.join( config.get_properties_path(), "properties", "saved_projects.yml", ), "w", encoding="utf8", ) as configfile: yaml.dump( self.savedProjects, configfile, default_flow_style=False, allow_unicode=True, )