X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FdaComposant%2FdaCore%2FPlatformInfo.py;h=f08b80a57659ec7b0cbb9007425ef8563e96b5ef;hb=d15b67bed58051bd93e3ae300bbbf355720cd428;hp=fde6791bf719c434117c80e61c1262941ef929b9;hpb=d82bfe35c7c9bf2e4471b3aff881a50ae74c1538;p=modules%2Fadao.git diff --git a/src/daComposant/daCore/PlatformInfo.py b/src/daComposant/daCore/PlatformInfo.py index fde6791..f08b80a 100644 --- a/src/daComposant/daCore/PlatformInfo.py +++ b/src/daComposant/daCore/PlatformInfo.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2008-2017 EDF R&D +# Copyright (C) 2008-2020 EDF R&D # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -27,20 +27,28 @@ le code et la plateforme sous forme de strings, ou d'afficher directement les informations disponibles par les méthodes. L'impression directe d'un objet de cette classe affiche les informations minimales. Par exemple : - print PlatformInfo() - print PlatformInfo().getVersion() + print(PlatformInfo()) + print(PlatformInfo().getVersion()) created = PlatformInfo().getDate() La classe "PathManagement" permet de mettre à jour les chemins système pour ajouter les outils numériques, matrices... On l'utilise en instanciant simplement cette classe, sans meme récupérer d'objet : PathManagement() + + La classe "SystemUsage" permet de sous Unix les différentes tailles + mémoires du process courant. Ces tailles peuvent être assez variables et + dépendent de la fiabilité des informations du système dans le suivi des + process. """ __author__ = "Jean-Philippe ARGAUD" __all__ = [] import os import sys +import platform +import locale +import logging # ============================================================================== class PlatformInfo(object): @@ -66,6 +74,52 @@ class PlatformInfo(object): import daCore.version as dav return dav.date + def getYear(self): + "Retourne l'année de création de la version" + import daCore.version as dav + return dav.year + + def getSystemInformation(self, __prefix=""): + __msg = "" + __msg += "\n%s%30s : %s" %(__prefix,"platform.system",platform.system()) + __msg += "\n%s%30s : %s" %(__prefix,"sys.platform",sys.platform) + __msg += "\n%s%30s : %s" %(__prefix,"platform.version",platform.version()) + __msg += "\n%s%30s : %s" %(__prefix,"platform.platform",platform.platform()) + __msg += "\n%s%30s : %s" %(__prefix,"platform.machine",platform.machine()) + if len(platform.processor())>0: + __msg += "\n%s%30s : %s" %(__prefix,"platform.processor",platform.processor()) + # + if sys.platform.startswith('linux'): + if hasattr(platform, 'linux_distribution'): + __msg += "\n%s%30s : %s" %(__prefix, + "platform.linux_distribution",str(platform.linux_distribution())) + elif hasattr(platform, 'dist'): + __msg += "\n%s%30s : %s" %(__prefix,"platform.dist",str(platform.dist())) + elif sys.platform.startswith('darwin'): + if hasattr(platform, 'mac_ver'): + __macosxv = {'5': 'Leopard', '6': 'Snow Leopard', '7': 'Lion', + '8': 'Mountain Lion', '9': 'Mavericks', '10': 'Yosemite', + '11': 'El Capitan', '12': 'Sierra'} + for key in __macosxv: + if (platform.mac_ver()[0].split('.')[1] == key): + __msg += "\n%s%30s : %s" %(__prefix, + "platform.mac_ver",str(platform.mac_ver()[0]+"(" + macosx_dict[key]+")")) + elif hasattr(platform, 'dist'): + __msg += "\n%s%30s : %s" %(__prefix,"platform.dist",str(platform.dist())) + elif os.name == 'nt': + __msg += "\n%s%30s : %s" %(__prefix,"platform.win32_ver",platform.win32_ver()[1]) + # + __msg += "\n" + __msg += "\n%s%30s : %s" %(__prefix,"platform.python_implementation",platform.python_implementation()) + __msg += "\n%s%30s : %s" %(__prefix,"sys.executable",sys.executable) + __msg += "\n%s%30s : %s" %(__prefix,"sys.version",sys.version.replace('\n','')) + __msg += "\n%s%30s : %s" %(__prefix,"sys.getfilesystemencoding",str(sys.getfilesystemencoding())) + __msg += "\n%s%30s : %s" %(__prefix,"locale.getdefaultlocale",str(locale.getdefaultlocale())) + __msg += "\n" + __msg += "\n%s%30s : %s" %(__prefix,"platform.node",platform.node()) + __msg += "\n%s%30s : %s" %(__prefix,"os.path.expanduser",os.path.expanduser('~')) + return __msg + def getPythonVersion(self): "Retourne la version de python disponible" return ".".join([str(x) for x in sys.version_info[0:3]]) # map(str,sys.version_info[0:3])) @@ -178,17 +232,90 @@ try: except ImportError: has_nlopt = False +try: + import sdf + has_sdf = True +except ImportError: + has_sdf = False + has_salome = bool( "ROOT_SALOME" in os.environ ) has_yacs = bool( "YACS_ROOT_DIR" in os.environ ) has_adao = bool( "ADAO_ROOT_DIR" in os.environ ) +has_eficas = bool( "EFICAS_ROOT_DIR" in os.environ ) # ============================================================================== -def uniq(sequence): +def uniq( __sequence ): """ Fonction pour rendre unique chaque élément d'une liste, en préservant l'ordre """ __seen = set() - return [x for x in sequence if x not in __seen and not __seen.add(x)] + return [x for x in __sequence if x not in __seen and not __seen.add(x)] + +def isIterable( __sequence, __check = False, __header = "" ): + """ + Vérification que l'argument est un itérable + """ + if isinstance( __sequence, (list, tuple, map) ): + __isOk = True + elif type(__sequence).__name__ in ('generator','range'): + __isOk = True + elif "_iterator" in type(__sequence).__name__: + __isOk = True + else: + __isOk = False + if __check and not __isOk: + raise TypeError("Not iterable or unkown input type%s: %s"%(__header, type(__sequence),)) + return __isOk + +def date2int( __date, __lang="FR" ): + """ + Fonction de secours, conversion pure : dd/mm/yy hh:mm ---> int(yyyymmddhhmm) + """ + __date = __date.strip() + if __date.count('/') == 2 and __date.count(':') == 0 and __date.count(' ') == 0: + d,m,y = __date.split("/") + __number = (10**4)*int(y)+(10**2)*int(m)+int(d) + elif __date.count('/') == 2 and __date.count(':') == 1 and __date.count(' ') > 0: + part1, part2 = __date.split() + d,m,y = part1.strip().split("/") + h,n = part2.strip().split(":") + __number = (10**8)*int(y)+(10**6)*int(m)+(10**4)*int(d)+(10**2)*int(h)+int(n) + else: + raise ValueError("Cannot convert \"%s\" as a D/M/Y H:M date"%d) + return __number + +def checkFileNameConformity( __filename, __warnInsteadOfPrint=True ): + if sys.platform.startswith("win") and len(__filename) > 256: + __conform = False + __msg = (" For some shared or older file systems on Windows, a file "+\ + "name longer than 256 characters can lead to access problems."+\ + "\n The name of the file in question is the following:"+\ + "\n %s")%(__filename,) + if __warnInsteadOfPrint: logging.warning(__msg) + else: print(__msg) + else: + __conform = True + # + return __conform + +def checkFileNameImportability( __filename, __warnInsteadOfPrint=True ): + if str(__filename).count(".") > 1: + __conform = False + __msg = (" The file name contains %i point(s) before the extension "+\ + "separator, which can potentially lead to problems when "+\ + "importing this file into Python, as it can then be recognized "+\ + "as a sub-module (generating a \"ModuleNotFoundError\"). If it "+\ + "is intentional, make sure that there is no module with the "+\ + "same name as the part before the first point, and that there is "+\ + "no \"__init__.py\" file in the same directory."+\ + "\n The name of the file in question is the following:"+\ + "\n %s")%(int(str(__filename).count(".")-1), __filename) + if __warnInsteadOfPrint: logging.warning(__msg) + else: print(__msg) + else: + __conform = True + # + return __conform # ============================================================================== class PathManagement(object): @@ -199,8 +326,6 @@ class PathManagement(object): "Déclaration des répertoires statiques" parent = os.path.abspath(os.path.join(os.path.dirname(__file__),"..")) self.__paths = {} - self.__paths["daExternals"] = os.path.join(parent,"daExternals") - self.__paths["daMatrices"] = os.path.join(parent,"daMatrices") self.__paths["daNumerics"] = os.path.join(parent,"daNumerics") # for v in self.__paths.values(): @@ -318,4 +443,4 @@ class SystemUsage(object): # ============================================================================== if __name__ == "__main__": - print('\n AUTODIAGNOSTIC \n') + print('\n AUTODIAGNOSTIC\n')