コード例 #1
0
ファイル: application.py プロジェクト: Roromis/SynApps
    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")
コード例 #2
0
ファイル: database.py プロジェクト: Roromis/SynApps
def get_repository_cfg(uri):
    """Renvoie : L'objet ConfigParser associé au dépôt"""
    # Téléchargement du dépôt
    try:
        tmp = urllib2.urlopen(uri + '/repository.ini').read()
    except (urllib2.URLError, urllib2.HTTPError) as e:
        logger.warning(u'Impossible de se connecter au dépôt %s' % uri)
        raise RepositoryConnectionError(uri, e)
        
    # Lecture du dépôt
    cfg = ConfigParser()
    try:
        cfg.read_string(tmp.decode('utf-8'))
    except Exception as e:
        logger.warning(u'Le dépôt %s est invalide' % uri)
        raise InvalidRepository(uri, e)
    
    return cfg
コード例 #3
0
ファイル: application.py プロジェクト: Roromis/SynApps
    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
コード例 #4
0
ファイル: application.py プロジェクト: Roromis/SynApps
    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)
コード例 #5
0
ファイル: application.py プロジェクト: Roromis/SynApps
    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
コード例 #6
0
ファイル: database.py プロジェクト: Roromis/SynApps
 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