def get_installed_as(self): filename = os.path.join("./cache/installed/", self.id, "installer.ini") cfg = ConfigParser() cfg.optionxform = str # Pour conserver la casse cfg.read(filename) return cfg.get("Framakey", "InstalledAs", "explicit")
def _get_installed_application_cfg_infos(self, id): repository = u'' try: cfg = ConfigParser() cfg.read(['./cache/installed/' + id + '/appinfo.ini', './cache/installed/' + id + '/installer.ini']) root = os.path.join(self.get_config('rootpath'), cfg.get('Framakey', 'ApplicationRoot', 'Apps/%s' % id)) if os.path.exists(root): size_u = get_size(root) else: logger.debug(u"L'application %s n'est plus installée, suppression des fichiers de cache." % id) shutil.rmtree('./cache/installed/' + id) return None, None, None try: branch = cfg.get('Framakey', 'Branch') except NoOptionError: # Rétrocompatibilité branch = cfg.get('Framakey', 'Repository') category = cfg.get('Details', 'Category') name = cfg.get('Framakey', 'Name') friendly_name = cfg.get('Framakey', 'FriendlyName') short_description = cfg.get('Details', 'Description') long_description = cfg.get('Framakey', 'LongDesc') size_c = 0 version = cfg.get('Version', 'PackageVersion') license = cfg.get('Framakey', 'License') author = cfg.get('Details', 'Publisher') show = cfg.getboolean('Framakey', 'Show', True) uri = '' except (NoSectionError, NoOptionError): logger.debug(u"Les informations de l'application %s sont incomplètes." % id) return None, None, None depends = cfg.getlist('Framakey', 'Depend') links = [] try: links.append(('Fiche Framakey', cfg.get('Details', 'Homepage'))) except (NoSectionError, NoOptionError): pass try: links.append(('Fiche Framasoft', cfg.get('Framakey', 'FramasoftPage'))) except (NoSectionError, NoOptionError): pass try: links.append(('Site Officiel', cfg.get('Framakey', 'AppWebsite'))) except (NoSectionError, NoOptionError): pass return (id, branch, repository, category, name, friendly_name, short_description, long_description, size_c, size_u, version, license, author, show, uri, 0, -2), links, depends
def _set_installed_as(self, installed_as): """ Modifie l'option InstalledAs dans le fichier installer.ini Arguments : installed_as : 'depend' si l'application a été installée en tant que dépendance, 'explicit' si l'application a été installée explicitement """ filename = os.path.join("./cache/installed/", self.id, "installer.ini") cfg = ConfigParser() cfg.optionxform = str # Pour conserver la casse cfg.read(filename) if not cfg.has_section("Framakey"): cfg.add_section("Framakey") cfg.set("Framakey", "InstalledAs", installed_as) with open(filename, "w") as f: cfg.write(f)
def get_installed_version(self): """Renvoie : Si l'application est installée : dictionnaire infos infos['branch'] : Branche de l'application installée infos['version'] : Version de l'application installée Sinon : None""" if os.path.isfile("./cache/installed/" + self.id + "/appinfo.ini"): cfg = ConfigParser() cfg.read("./cache/installed/" + self.id + "/appinfo.ini") infos = {} try: try: infos["branch"] = cfg.get("Framakey", "Branch") except NoOptionError: # Rétrocompatibilité infos["branch"] = cfg.get("Framakey", "Repository") infos["version"] = version.LooseVersion(cfg.get("Version", "PackageVersion")) except (NoSectionError, NoOptionError): return None return infos else: return None
def _get_installation_infos(self, filename=None): """ Arguments : filename : chemin vers le paquet (facultatif) Renvoie : """ infos = {} # Emplacement de l'application infos["application_root"] = os.path.join("Apps", self.id) infos["install_dir"] = "Apps" infos["remove"] = {} infos["remove"]["files"] = [] infos["remove"]["dirs"] = [] infos["remove"]["main"] = ["App", "Other"] infos["preserve"] = {} infos["preserve"]["files"] = [] infos["preserve"]["dirs"] = [] cfg = ConfigParser() if filename: try: package = zipfile.ZipFile(filename, "r") except Exception as e: logger.error("Le paquet %s n'est pas une archive zip." % self.id) raise InvalidPackage(self, e) try: inifile = package.read(self.id + "/App/AppInfo/installer.ini") cfg.read_string(inifile.decode("utf-8")) except: return infos else: cfg.read("./cache/installed/" + self.id + "/installer.ini") # Emplacement de l'application infos["application_root"] = cfg.get("Framakey", "ApplicationRoot", "Apps/%s" % self.id) infos["install_dir"] = cfg.get("Framakey", "InstallDir", "Apps") # Dossier principaux if cfg.get("MainDirectories", "RemoveAppDirectory", "true").lower() != "true": infos["remove"]["main"].remove("App") if cfg.get("MainDirectories", "RemoveDataDirectory", "false").lower() == "true": infos["remove"]["main"].append("Data") if cfg.get("MainDirectories", "RemoveOtherDirectory", "true").lower() != "true": infos["remove"]["main"].remove("Other") # Fichiers à supprimer infos["remove"]["files"] = [i.replace("\\", "/") for i in cfg.getlist("FilesToRemove", "RemoveFile")] # Fichiers à conserver infos["preserve"]["files"] = [i.replace("\\", "/") for i in cfg.getlist("FilesToPreserve", "PreserveFile")] # Dossiers à supprimer infos["remove"]["dirs"] = [i.replace("\\", "/") for i in cfg.getlist("DirectoriesToRemove", "RemoveDirectory")] # Dossiers à conserver infos["preserve"]["dirs"] = [ i.replace("\\", "/") for i in cfg.getlist("DirectoriesToPreserve", "PreserveDirectory") ] return infos